我相信您错过了单元测试和模拟的整个想法。
- 在对进行单元测试时
UserService
,您不想使用实际的UserRepository
实现。 - 您
UserRepository
模拟了一个,您不希望模拟对象立即表现出真实的对象。您需要弥补其行为(即存根)。 - 您几乎不需要在单元测试中使用Spring Runner。
为了确定模拟对象的行为,您必须了解被测系统(
UserService在您的情况下为SUT )及其依赖项(
UserRepository)的预期交互作用。
在您的情况下,测试应该看起来像(尚未编译,只是向您展示想法)
public class UserServiceTest { @InjectMocks UserService userService; @Mock UserDao mockUserRepository; @Before public void setUp(){ MockitoAnnotations.initMocks(this); } @Test public void testFindUser(){ // Given User dummyUser = new User(); when(mockUserRepository.findByLoginAndPassword(anyString(), anyString()).thenReturn(dummyUser); // When User result = userService.findUser("first", "teste"); // Then // you are expecting service to return whatever returned by repo assertThat("result", result, is(sameInstance(dummUser))); // you are expecting repo to be called once with correct param verify(mockUserRepository).findByLoginAndPassword("first", "teste"); }}


