Bootstrap

【单元测试】Mockito与PowerMock介绍

什么是Mock?

在单元测试中,我们往往想去独立地去测一个类中的某个方法,但是这个类可不是独立的,它会去调用一些其它类的方法和service,这也就导致了以下两个问题:

  • 外部服务可能无法在单元测试的环境中正常工作,因为它们可能需要访问数据库或者使用一些其它的外部系统。
  • 我们的测试关注点在于这个类的实现上,外部类的一些行为可能会影响到我们对本类的测试,那也就失去了我们进行单测的意义。

为了解决这种问题,Mockito和PowerMock诞生了。这两种工具都可以用一个虚拟的对象来替换那些外部的、不容易构造的对象,便于我们进行单元测试。两者的不同点在于Mockito对于大多数的标准单测case都很适用,而PowerMock可以去解决一些更难的问题(比如静态方法、私有方法等)。

Mockito

话不多说,就上干货。在下面这个例子中,我们要测试的class是DummyServiceDummyRepository用来从数据库中获取数据。getDummyNameUpperCase()方法会根据id获取数据,且该方法有一些数据处理的逻辑,如果我们只想测试这个逻辑:

public class DummyServiceTest {
   

    @Mock
    private DummyRepository dummyRepository;

    @InjectMocks
    private DummyService dummyService;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void getDummyNameUpperCase() {

        Dummy mockedDummy = new Dummy("dm1", "Dummy 1", 
;