注入自动装配变量

我有以下服务类别:


    @Component
    public class ABC {


      @Autowired private Someclass assumeRoles; 

      @Override
      public @NotNull Optional<Something> translate(int id) {
             // Some Code
             Someclass result = assumeRoles.getRole(id);

      }
   }

现在我想为我的类编写Junit,我不想被调用Role.getRole(id),而不是我想用一些虚拟值来模拟此函数调用。

那我能做到吗?

我的Junit课程是

    @RunWith(MockitoJUnitRunner.class)
    public class ABCTest {

      @InjectMocks
      private ABC test = new ABC();

      @Mock
      private Someclass assumeRoles;


      @Test
      public void testTranslate() {

        ABC result =  test.translate(id);    
      }

    }
liuyao302 回答:注入自动装配变量

您已经将SomeClass assumeRoles标记为@Mock,可以如下模拟Role.getRole(id);语句。

Mockito.when(assumeRoles.getRole(Mockito.any(id))).thenReturn(someResult);

在做出一些假设之后,我已经回答了这个问题,建议您使用正确的变量和类名来改进您提供的代码段。

,

顺便说一句,春季团队不建议使用field injection,在这里进行解释:https://blog.marcnuri.com/field-injection-is-not-recommended/

因此,如果需要,您最好标记字段finalprivate final SomeClass assumeRoles;,然后提供这样的构造函数:

public ABC(SomeClass assumeRoles) {
  this.assumeRoles = assumeRoles;
}

通过这种方式,将伪SomeClass传递给构造函数以获取ABC的实例会更容易。

本文链接:https://www.f2er.com/3161557.html

大家都在问