Java 当我想测试一个复杂的方法时,mockito是否存储操作

Java 当我想测试一个复杂的方法时,mockito是否存储操作,java,unit-testing,mockito,Java,Unit Testing,Mockito,我是莫基托的新手。这是一个简单而酷的框架(它让我喜欢测试:)) 我正在测试一个复杂的方法: 在这个方法中,我只在数据更改时调用服务 public void testMyFacadeMethod() { .... If (dataChanged) { myService.callServiceMethod(); } } 在我的测试方法中:我准备模拟,然后更改数据并调用 verify(myService).callServiceMethod();

我是莫基托的新手。这是一个简单而酷的框架(它让我喜欢测试:))

我正在测试一个复杂的方法: 在这个方法中,我只在数据更改时调用服务

public void testMyFacadeMethod() {   
    .... 
    If (dataChanged) {
        myService.callServiceMethod();
    }
}
在我的测试方法中:我准备模拟,然后更改数据并调用

verify(myService).callServiceMethod();
一切正常,我的考试通过了。 在同一个测试方法中,我调用了facadeMethod,因此不能调用myService.callServiceMethod(因为我的数据没有改变)。 测试失败:

verify(myService).callServiceMethod();
myFacadeMethod() <== tested method
verify(myService, times(0)).callServiceMethod(); <= tell me that this method is called once
verify(myService.callServiceMethod();

myFacadeMethod()是,Mockito不会自动重置方法调用的次数。 您可以使用
Mockito.reset(T)
重置模拟

但是,您应该尽量避免使用这种方法。如果测试代码是智能的,那么它通常是不必要的,因此它的存在可能表明代码的气味。看见

是的,Mockito不会自动重置方法调用的数量。 您可以使用
Mockito.reset(T)
重置模拟

但是,您应该尽量避免使用这种方法。如果测试代码是智能的,那么它通常是不必要的,因此它的存在可能表明代码的气味。看见

是的,Mockito不会自动重置方法调用的数量。 您可以使用
Mockito.reset(T)
重置模拟

但是,您应该尽量避免使用这种方法。如果测试代码是智能的,那么它通常是不必要的,因此它的存在可能表明代码的气味。看见

是的,Mockito不会自动重置方法调用的数量。 您可以使用
Mockito.reset(T)
重置模拟

但是,您应该尽量避免使用这种方法。如果测试代码是智能的,那么它通常是不必要的,因此它的存在可能表明代码的气味。看见

您可以使用
Mockito.reset
重置模拟。但是,最好更改测试的设计。您应该有两个单独的测试,每种情况一个,并且应该在每个测试之前创建新的模拟

大概是这样的:

@Before
public void setup() {
    // create a myService mock
}

@Test
public void testMyFacadeMethodWithDataChange() {
    // change data, call tested method
    verify(myService).callServiceMethod();
}

@Test
public void testMyFacadeMethodWithoutDataChange() {
    // no data change, call tested method
    verify(myService, times(0)).callServiceMethod();
}

您可以使用
Mockito.reset
重置模拟。但是,最好更改测试的设计。您应该有两个单独的测试,每种情况一个,并且应该在每个测试之前创建新的模拟

大概是这样的:

@Before
public void setup() {
    // create a myService mock
}

@Test
public void testMyFacadeMethodWithDataChange() {
    // change data, call tested method
    verify(myService).callServiceMethod();
}

@Test
public void testMyFacadeMethodWithoutDataChange() {
    // no data change, call tested method
    verify(myService, times(0)).callServiceMethod();
}

您可以使用
Mockito.reset
重置模拟。但是,最好更改测试的设计。您应该有两个单独的测试,每种情况一个,并且应该在每个测试之前创建新的模拟

大概是这样的:

@Before
public void setup() {
    // create a myService mock
}

@Test
public void testMyFacadeMethodWithDataChange() {
    // change data, call tested method
    verify(myService).callServiceMethod();
}

@Test
public void testMyFacadeMethodWithoutDataChange() {
    // no data change, call tested method
    verify(myService, times(0)).callServiceMethod();
}

您可以使用
Mockito.reset
重置模拟。但是,最好更改测试的设计。您应该有两个单独的测试,每种情况一个,并且应该在每个测试之前创建新的模拟

大概是这样的:

@Before
public void setup() {
    // create a myService mock
}

@Test
public void testMyFacadeMethodWithDataChange() {
    // change data, call tested method
    verify(myService).callServiceMethod();
}

@Test
public void testMyFacadeMethodWithoutDataChange() {
    // no data change, call tested method
    verify(myService, times(0)).callServiceMethod();
}