当前位置: 首页 > 知识库问答 >
问题:

单元测试-注入空模拟组件

秦权
2023-03-14

我有以下用例:

public class MyTestClass{

 @Mock
 SomeService someService;

 @Mock 
 AnotherService anotherService;

 @InjectMock
 MainService mainService;

 @BeforeMethod
 public void init() {
   initMocks(this);
 }

 @Test
 public void test(){
  when(someService.someMethod(any())).thenReturn(something);
  when(anotherService.someMethod(any()).thenReturn(something);
  mainService.someMainMerhod();
  // ...other assert logic
 }
}
 @Component
 public class MainService{
  @Autowired
  private SomeService someService; //Why here I have null component

  private AnotherService anotherService; // and here I have an initialized component ???

  public MainService(AnotherService anotherService){
    this.anotherService = anotherService;
  }

 // implementation
}

问题2:为什么如果我只使用构造函数而不使用@Autowired或者反之亦然,那么一切都能正常工作,因为我没有加载Spring上下文...我有单元测试...

共有1个答案

穆华彩
2023-03-14

Javadoc指出:“Mockito将尝试只按构造函数注入、setter注入或属性注入的顺序注入模拟。如果任何策略失败,Mockito都不会报告失败;也就是说,您必须自己提供依赖项。”

因此,它将默默地失败。

 类似资料:
  • 我的实现出了什么问题?谢谢

  • 第一个问题:如何注入模拟(或真实?)HttpServletResponse在我对CXF JAX-RS服务endpoint进行单元测试期间? 我们的服务是如何设置的示例(注意我没有控制/权限来更改非测试结构): 测试类: 我可能在这里做错了几件事,但是我希望我只需要在我的自定义调用器中加入正确的“魔法”,以便正确地向我的endpoint注入HttpServlet响应。我要注意的是,在我没有注入上下文

  • 问题内容: 每当我想测试使用资源注入的类时,我最终都会包含一个仅在测试中使用的构造函数: 还有另一种模拟资源注入的方式,或者这是遵循的正确模式吗? 问题答案: 您可以使用简单的光泽效果,它可以模拟EJB注入系统。 另一种方法是在测试中使用反射来设置字段,我有时使用类似这样的内容:

  • 我们有一些传统的laravel项目,它们在类中使用正面。 我们最近的项目使用了底层laravel类的依赖注入,facades所代表的类正如Taylor Otwell自己所暗示的那样。(我们对每个类使用构造函数注入,但为了保持示例简短,这里我使用方法注入并使用单个类。) 我知道外表是可以被嘲笑的 这对单元测试很有效。我试图理解的问题是,这些门面是否被“全球”嘲笑。 例如,让我们假设我正在编写一个集成

  • 我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient

  • 遇到了另一个常见的问题,同时为Spring Batch编写单元测试和集成测试组件是如何模拟域对象。一个很好的例子是StepExecutionListener,如下所示: public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport { public ExitStatus afterSte