我刚刚开始使用JMockit,我对JMockit的一些基础知识有点困惑,在创建模拟对象的时候,模拟对象范围以及模拟的效果等等。请帮助解决以下问题。
我的问题参考以下代码:
public class MyClassTest
{
@Mocked({"method1","method2"})
ClassA classA; //ClassA has only static method
@Mocked
ClassB classB;
@Test
public void test1()
{
new NonStrictExpectations() {{
MyClassA.method3(classB);
result = xxx;
}};
// testing code
....
// verification
...
}
@Test
public void test2(@Mocked ClassC classC)
{
...
}
}
问题:
(1)对于junit,为每个测试新建一个实例变量(如test1(),test2()),对吧?在每次测试运行之前,是否都会创建一个新的ClassB实例?
(2)嘲笑班级。它使ClassB中的所有方法都被模拟为所有测试(在这种情况下为test1()和test2()),对吗?
(3)如果为模拟对象指定了方法,例如“@Mocked({”method1“,”method2“})ClassA classA;”,这意味着只能模拟method1和method2?是否可以添加其他方法在Expectations for a test中进行模拟?
我认为这个模拟不应该影响其他测试?是不是ClassC只在test2()中被模拟?
(1)对于测试中指定的期望,其范围是测试的局部范围,这意味着模拟方法仅在此测试中有效吗?例如,ClassA.method3()仅在test1()中模拟,对吧?
(2)期望中记录的方法仅在从测试代码调用匹配方法时运行,是吗?如果记录的方法参数不匹配,它会运行实际方法吗?
运行test1()时,我在ClassA.method3()中遇到异常。不知怎的,ClassA.method3()的真正方法被执行并给出了异常。我想这是由于ClassA.method3()的参数不匹配?
答案 0 :(得分:1)
回答你的问题:
(1)是; (2)是; (3)是的,其他方法不能在同一个测试类中嘲笑。
是的,仅适用于具有模拟参数的测试。
(1)对,期望仅在其记录的范围内有效。 (2)不,一旦被嘲笑,方法的真正实现永远不会被执行。
至于你获得的例外,我无法在没有完成测试的情况下告诉它为什么会发生。