初始化模拟对象-MockIto

有很多方法可以使用MockIto初始化模拟对象。其中最好的方法是什么?


1。


 public class SampleBaseTestCase {


   @Before public void initMocks() {

       MockitoAnnotations.initMocks(this);

   }

2。


@RunWith(MockitoJUnitRunner.class)

[编辑] 3。


mock(XXX.class);

建议我是否还有其他比这些更好的方法...


MYYA
浏览 578回答 3
3回答

子衿沉夜

现在(从v1.10.7开始),有第四种实例化模拟的方法,它使用了一个称为MockitoRule的JUnit4 规则。@RunWith(JUnit4.class)   // or a different runner of your choicepublic class YourTest  @Rule public MockitoRule rule = MockitoJUnit.rule();  @Mock public YourMock yourMock;  @Test public void yourTestMethod() { /* ... */ }}JUnit查找以@Rule注释的TestRule的子类,并使用它们包装Runner提供的测试语句。这样的结果是您可以提取@Before方法,@ After方法,甚至尝试...将包装器捕获到规则中。您甚至可以在您的测试中与这些交互,就像ExpectedException一样。MockitoRule的行为几乎与MockitoJUnitRunner完全一样,除了可以使用任何其他运行程序,例如Parameterized(允许测试构造函数接受参数,以便测试可以多次运行)或Robolectric的测试运行程序(因此其类加载器可以提供Java替换)适用于Android本机类)。这使得在最新的JUnit和Mockito版本中使用时更加灵活。综上所述:Mockito.mock():直接调用,没有注释支持或使用验证。MockitoAnnotations.initMocks(this):支持注释,无使用验证。MockitoJUnitRunner:注释支持和使用验证,但是您必须使用该运行器。MockitoRule:任何JUnit运行器都支持注释和使用验证。

蛊毒传说

有一种整齐的方法可以做到这一点。如果是单元测试,则可以执行以下操作:@RunWith(MockitoJUnitRunner.class)public class MyUnitTest {    @Mock    private MyFirstMock myFirstMock;    @Mock    private MySecondMock mySecondMock;    @Spy    private MySpiedClass mySpiedClass = new MySpiedClass();    // It's gonna inject the 2 mocks and the spied object per reflection to this object    // The java doc of @InjectMocks explains it really well how and when it does the injection    @InjectMocks    private MyClassToTest myClassToTest;    @Test    public void testSomething() {    }}编辑:如果这是一个集成测试,则可以执行此操作(不打算与Spring一起使用。仅演示您可以使用不同的Runners初始化模拟):@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("aplicationContext.xml")public class MyIntegrationTest {    @Mock    private MyFirstMock myFirstMock;    @Mock    private MySecondMock mySecondMock;    @Spy    private MySpiedClass mySpiedClass = new MySpiedClass();    // It's gonna inject the 2 mocks and the spied object per reflection to this object    // The java doc of @InjectMocks explains it really well how and when it does the injection    @InjectMocks    private MyClassToTest myClassToTest;    @Before    public void setUp() throws Exception {          MockitoAnnotations.initMocks(this);    }    @Test    public void testSomething() {    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java