Java 依赖项验证函数调用mockito
我想创建单元测试来测试包含另一个对象的类。我已经为第二个对象创建了一个模拟 当我测试第一个类的方法时,我想验证是否调用了第二个对象的函数。为此,我使用函数Java 依赖项验证函数调用mockito,java,testing,junit,mocking,verify,Java,Testing,Junit,Mocking,Verify,我想创建单元测试来测试包含另一个对象的类。我已经为第二个对象创建了一个模拟 当我测试第一个类的方法时,我想验证是否调用了第二个对象的函数。为此,我使用函数verify(mock).myfunction() 我的问题是,我的对象2的同一个函数可以被我的第一个类的几个函数调用 当我编写测试类时,我一个函数一个函数地编写测试函数,但似乎在测试方法开始时“时间”并没有重置 我不知道我是否清楚,因此,举个例子: public class Main { public Object o = crea
verify(mock).myfunction()代码>
我的问题是,我的对象2的同一个函数可以被我的第一个类的几个函数调用
当我编写测试类时,我一个函数一个函数地编写测试函数,但似乎在测试方法开始时“时间”并没有重置
我不知道我是否清楚,因此,举个例子:
public class Main {
public Object o = createObject();
public void function1(){
o.function();
}
public void function2(){
o.function();
}
public Object createObject() {
return new Object() ;
}
public class MainTest {
private static Main main;
@BeforeClass
public static void setUp() throws Exception {
final Object mockO = mock(Object.class);
main = new Main() {
@Override
public Object createObject() {
return mockO;
}
};
}
@Test
public void testfunction1(){
verify(main.world[0], never()).function();
main.function1();
verify(main.world[0]).function();
}
@Test
public void testfunction2(){
verify(main.world[0], never()).function();
main.function2();
verify(main.world[0]).function();
}
如果我测试testfunction1()
和testfunction2()
被忽略,这就是工作
如果我测试testfunction2()
和testfunction1()
被忽略,这就是工作
但是如果执行了这两个测试,我有一个错误:
org.mockito.exceptions.verification.NeverWantedButInvoked:
Object.function();
Never wanted here :
-> at test.MainTest.testfunction1
but invoked here :
at source.Main.function2
如何独立测试这两个函数?将setUp()
方法重命名为其他方法,使其成为非静态方法,并使其在之前而不是@BeforeClass
:
private Main main;
@Before
public void initMain()
{
// what you already do
}
@BeforeClass
方法在类中的所有测试之前运行一次,而@before
方法在每个测试之前运行一次。您的设置()
方法是静态的
。。。为什么?如果我删除静态的“java. Lang.Ext:方法SETUP()应该是静态的,那么我有一个错误”HMM,你会考虑切换到TestNG吗?p当谷歌搜索时,这个错误消息经常被报告为组件x和y中的错误。。。TestNG从来没有遇到过这样的问题。在public void init()抛出AWTException{main.init();}之前,我已经有了一个带有“@Before”“@Before”“”的方法。我试图删除“static”,但我有一个错误“java.lang.Exception:方法setUp()应该是static”你能重命名你的setUp()吗
方法转换为其他方法,如在我的示例中?我习惯于TestNG,它在方法命名上没有这样的限制…我在测试方法的每一端都有重置模拟的测试,它似乎可以工作。不需要重置模拟。检查您是否在使用JUnit 4。然后检查您是否在使用之前的注释。
(不是@BeforeClass
)在实例方法(不是静态方法)上。在每个测试方法之前调用带有@Before
注释的方法。您需要这样做,因为您需要在每个测试之前重新创建模拟,所以测试是隔离的。