我已经Spring类说时的Mockito()。在龙目岛@RequiredArgsConstructor(onConstructor = @__(@自动装配Autowired))使用的
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
class MainServiceImpl implements MainService {
private final InternalService internalService;
public Set<String> do(String anything) {
Set<String> relevent = internalService.finaIntern(anything);
return relevent;
}
}
我写单元测试情况下,预期thenReturn()不行为如下
@RunWith(MockitoJUnitRunner.class)
class TestMainServiceImpl {
@InjectMocks
private MainServiceImpl service;
@Mock
InternalService internalService;
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
@Test
public void testDo() {
Set<String> setData = new HashSet<>();
setData.add("ABC");
String a ="a";
when(internalService.finaIntern(any(String.class))
.thenReturn(setData);
Set<String> result = service.do(a);
assertTrue(!result.isEmpty());
}
}
这里我的测试用例失败,但如果我删除最终形式MainServiceImpl,做一个明确的@Autowired像下面
@Component
class MainServiceImpl implements MainService {
@Autowired
private InternalService internalService;
.....
在这里,我很想知道 1.如何在我的测试情况下通过,如果我删除final关键字 2.是否使用@RequiredArgsConstructor一个很好的做法,如果是,那么如何,如果没有那么也是为什么?
预先感谢
您的测试没有意义...您正在创建一个模拟并将其注入到测试用例中,而不是“MainServiceImpl”。因此,无论您是使用代码还是显示代码,或者您的代码都是真正的代码。 –
@ M.Deinum由于安全原因,我无法在这里发布实际的代码,所以我输入了类似的类。这是一个错字错误,我修改了它。 – MishraJi
你也有一个double init,你已经使用'MockitoJUnitRunner'运行,但是再次在你的'@ before'方法中初始化它们。你最先创建他们(特别是由于你的最终成员)。 –