0

我想创建单元测试来测试包含另一个对象的类。我为第二个对象创建了一个模拟。

当我测试我的第一个类的方法时,我想验证是否调用了第二个对象的函数。为此,我使用该功能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

如何独立测试这两个功能?

4

1 回答 1

2

将您的setUp()方法重命名为其他方法,使其成为非静态方法,并使其成为@Before而不是@BeforeClass

private Main main;

@Before
public void initMain()
{
    // what you already do
}

@BeforeClass方法在类中的所有测试之前运行一次,而@Before方法在每次测试之前运行一次。

于 2013-01-07T10:29:42.113 回答