A. 如何mock调用super的方法
据我说知: mock测试方法用于构造对象,而不是你说的方法 比如,你现在要调用数据库,但这块也许还没完成,无法用orm框架进行映射,你就可以先new一些这样的对象,将它们保存或当作参数传入等 比如某接口中(UserDao)你有一个方法叫:queryUser(S...
B. java里有什么办法判断一个Class是否为抽象类
若是判断Class类是否为抽象类,可以试试Modifier里的静态方法,里面有很多,判断是否是抽象,是否是静态,是否是私有等等
Classc=Foo.class;
booleanisAbstract=Modifier.isAbstract(c.getModifiers());
C. JAVA 抽象方法的重写
可以用两种方法来解决这个问题:
第一种方法是先声明一个抽象类,在其中声明该抽象方法,然后在子类中实现该抽象方法代码如下:
//抽象类
package ;
public abstract class Sohu {
public abstract boolean hg();
}
//抽象类子类实现该抽象方法类
package ;
public class SohuChild extends Sohu {
private String name;
private String pwd;
@Override
public boolean hg() {
if(name.equals("user")&&pwd.equals("1234")){return true;}
else return false;
}
}
//抽象类子类方式测试类
package ;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
SohuChild sohu=new SohuChild();
sohu.setName("user");
sohu.setPwd("1234");
System.out.println(sohu.hg());
}
}
第二中方法:定义接口,并在其中声明抽象方法,然后在接口实现类中实现该抽象方法
代码如下:
package ;
//接口
public interface Bai {
//接口中抽象方法
public abstract boolean hg();
}
//接口实现类
package ;
public class BaiImpl implements Bai {
private String name;
private String pwd;
@Override
public boolean hg() {
if(name.equals("user")&&pwd.equals("1234")){return true;}
else return false;
}
}
//下面是接口方式的测试类
package ;
public class Test {
public static void main(String[] args) {
BaiImpl =new BaiImpl();
.setName("user");
.setPwd("1234");
System.out.println(.hg());
}
}
请君测试代码。
D. 什么是抽象类和抽象方法
抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。 抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。 abstract不能与private、static、final、native并列修饰同一个方法。 程序举例:abstract class Animal //定义抽象类 abstract void eat(); //定义抽象方法}class Horse extends Animal //定义继承Animal的子类 void eat() //重写父类的抽象方法 }class Dog extends Animal void eat() }class test}运行结果: 马吃草料! 狗吃骨头!
E. 如何用PowerMock进行Spy一个抽象类
1、用下面的的Mockito的API,我成功地做到这一点:public class CodeWithPrivateMethod { public void meaningfulPublicApi() { if (doTheGamble("Whatever", 1
F. 如何mock静态方法
因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不能被子类覆盖的,所以Mockito不能mock静态方法。
但PowerMock可以mock静态方法,因为它直接在bytecode上工作,类似这样:
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.moles.testng.PowerMockTestCase;
import org.testng.Assert;
import org.testng.annotations.Test;
@PrepareForTest(AbstractAnimal.class)
public class AbstractAnimalTest extends PowerMockTestCase {
G. .net中的抽象类和抽象方法,虚方法 详解
如果一个类里面有抽象方法,那么这个类一定是抽象类,所谓抽象方法,也就是只有一个名称定义而已,说白了,抽象方法没有实际的行为,只定义了名称。例子:abstract
public
void
function();//定义了一个名称为function方法名的抽象方法。另外,如果继承了抽象类,那么必须重写抽象类里面的所有抽象方法。
虚方法,这个是为了给子类继承重写方法而修饰的,也就是如果一个方法是虚方法的话,那么子类就可以重写这个方法。
H. 如何用c#定义一个抽象类
1、声明一个抽象方法使用abstract关键字。
2、一个类中可以包含一个或多个抽象方法。
3、抽象类中可以存在非抽象的方法。
4、抽象类不能被直接被实例化。
5、实现抽象类用“:”(冒号),实现抽象方法用override关键字。
6、抽象类可以被抽象类所继承,结果仍是抽象类。
7、抽象方法被实现后,不能更改修饰符。
DEMO:
public abstract class Person
{
public abstract void SayHello();
public void about()
{
Console.WriteLine("Abstract Demo");
}
}
public class Student : Person
{
public override void SayHello()
{
Console.WriteLine("SayHello");
}
}
class MainClass
{
public static void Main()
{
new Student().SayHello();
}
}