【问题标题】:Inject mock object without java interface for unit testing注入没有java接口的模拟对象进行单元测试
【发布时间】:2013-11-20 16:38:25
【问题描述】:

我的java项目有多个层,比如Controller(依赖)Service(依赖)DAO。 我的目标是对 Controller 进行单元测试。

我创建了 Mock 服务对象以将其注入 Controller 类。

谷歌搜索后,我了解到我可以使用 java 接口来做到这一点。

理想情况下,服务层不需要接口。

我想知道是否有其他方法可以在没有 java 接口的情况下注入模拟对象。

【问题讨论】:

    标签: unit-testing junit mocking


    【解决方案1】:

    有像Mockito 这样的模拟库,它可以为类创建模拟而不需要接口。

    MyService serviceMock = org.Mockito.mock(MyService.class);
    controller.setService(serviceMock);
    

    【讨论】:

    • 谢谢@StefanBirkner。问题解决了。仅供参考:您需要在 mock(..) 中传递 MyService.class 。顺便说一句,我使用 @RunWith(MockitoJUnitRunner.class) 来初始化模拟对象。代码更简洁。
    • 由于它是干净的 api 和类似的功能,让我感到困惑的是,Mockito 并不是在 java 中模拟的事实上的标准。
    【解决方案2】:

    如果控制器中的类使用服务类,您可以在对控制器类进行单元测试时模拟该服务类并注入到控制器类中。

    public class MyController {
        private MyService myService;
    
        public void setMyService(MyService myService) {
            this.myservice = myservice;
        }
    }
    

    是模拟接口还是模拟类取决于控制器类所具有的引用类型。

    在上面的例子中,如果MyService 是一个接口,你可以模拟那个接口。但如果它是一个类,那么你必须模拟那个类。

    希望能解决您的疑虑。

    【讨论】:

      猜你喜欢
      • 2021-06-11
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多