Sha*_*ane 27 java junit mockito
我正在使用Mockito框架在我的JUnit测试中创建Mock对象.每个模拟器都知道调用了哪些方法,所以在我的测试中我可以编写
verify(myMock, atLeastOnce()).myMethod();
Run Code Online (Sandbox Code Playgroud)
我想知道这个内部的模拟知识是否会在我的测试中持续存在?如果它确实存在,那么当我verify在两个测试中使用相同的方法时,我可能会得到误报.
一个代码示例
@RunWith(MockitoJUnitRunner.class)
public class EmrActivitiesImplTest {
@Mock private MyClass myMock;
@Before
public void setup() {
when(myMock.myMethod()).thenReturn("hello");
}
@Test
public void test1() {
// ..some logic
verify(myMock, atLeastOnce()).myMethod();
}
@Test
public void test2() {
// ..some other logic
verify(myMock, atLeastOnce()).myMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
模拟状态是持久的 - test2将通过,因为test1的验证方法已通过
模拟状态被重置 - 如果未调用myMock.myMethod(),test2将失败
Evg*_*eev 29
每次运行新的测试方法时,JUnit都会创建一个新的测试类实例,并在每次创建新的测试类时运行@Before方法.你可以轻松测试它
@Before
public void setup() {
System.out.println("setup");
when(myMock.myMethod()).thenReturn("hello");
}
Run Code Online (Sandbox Code Playgroud)
MockitoJUnitRunner将为每个测试方法创建一个新的MyMock模拟实例
Ørj*_*sen 16
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class sandbox {
@Mock
private MyClass myMock;
@Before
public void setup() {
when(myMock.myMethod()).thenReturn("hello");
}
@Test
public void test1() {
myMock.myMethod();
verify(myMock, times(1)).myMethod();
}
@Test
public void test2() {
myMock.myMethod();
verify(myMock, times(1)).myMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
这过去了.如果状态持续,则第二次测试将失败.如果您调试它,您将获得每个测试的模拟对象的新实例.