Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 依赖项验证函数调用mockito_Java_Testing_Junit_Mocking_Verify - Fatal编程技术网

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
注释的方法。您需要这样做,因为您需要在每个测试之前重新创建模拟,所以测试是隔离的。