EasyMock和Unitils相当于Mockito @ InjectMocks

时间:2012-02-06 12:56:36

标签: java mocking mockito easymock unitils

EasyMock或Unitils Mock(非Unitils支持的EasyMock)中是否有任何技术可以将模拟直接注入到被测试类中?

例如。在Mockito中,可以将mocks直接注入类的成员变量

public class TimeTrackerTest {
    @InjectMocks   // Used to create an instance the CUT
    private TimeTrackerBean cut;
    @Mock  // Used to create a Mock instance
    EntityManager em;
    @Before
    public void injectMockEntityManager() {
        MockitoAnnotations.initMocks(this);   // Injects Mocks into CUT
    }
    @Test
    ...
}

可以使用EasyMock或Unitils Mock完成这些工作吗?在easymock中,我们需要在CUT中使用单独的setter方法来支持测试中的注入。我是对的还是方向注射在某种程度上是可能的?

-Thanks

4 个答案:

答案 0 :(得分:6)

我不知道任何注释可以让你用EasyMock做到这一点,但是,Spring有ReflectionTestUtils,它可以让你轻松地对私有字段进行注入而无需setter方法。在我切换到Mockito之前,我发现这个课程非常宝贵。

答案 1 :(得分:3)

Unitils具有“注入”模块,用于将模拟对象注入到测试对象中。有关详细信息,请参阅http://unitils.org/tutorial-inject.html

例如:

public class MyServiceTest extends UnitilsJUnit4
{ 
    @TestedObject MyService myService; 
    @InjectIntoByType Mock<MyDao> myDao; 

    @Test
    public void myTestMethod()
    {
        myDao.returns("something").getSomething(); 

        myService.doService();

        myDao.assertInvoked().storeSomething("something"); 
    }
}

答案 2 :(得分:3)

也许这个帖子已经死了但是你现在可以使用带有@TestSubject,@Mock标签的EasyMock 3.2并使用@RunWith(EasyMockRunner.class)运行测试。看得好(不是我!)示例:

http://henritremblay.blogspot.ie/2013/07/easymock-32-is-out.html

答案 3 :(得分:0)

以下内容将有助于在其字段中注入使用@Mock创建的模拟。

EasyMockSupport.injectMocks(剪切);

这里cut是注入mock的对象。有关更多信息,请参阅以下链接 http://easymock.org/api/org/easymock/EasyMockSupport.html#injectMocks-java.lang.Object-