testclass.java
@Test
public void testgetDictionaryValueListById() {
DictionaryValue dictionaryValue = new DictionaryValue();
dictionaryValue.setId(1);
dictionaryValue.setValueName("Test Dictionary Value");
dictionaryValue.setValueKey("12345678");
dictionaryValue.setStatus("Active");
dictionaryValue.setCreatedOn(new Date());
dictionaryValue.setUpdatedOn(new Date());
Mockito.when(dictionaryValueRepo.findById(1).get()).thenReturn(dictionaryValue);
assertThat(dictionaryService.getDictionaryValueListById(1)).isEqualTo(dictionaryValue);
}
Service.java
public DictionaryValue getDictionaryValueListById(int id) {
return dictionaryValueRepo.findById(id).get();
}
Repo.java
@Repository
public interface DictionaryValueRepo extends JpaRepository<DictionaryValue, Integer> {
}
我在testclass.java中执行测试用例时一次又一次没有出现这样的值。我不知道为什么?但是当我从控制器运行我的服务方法时,它正在按预期工作 - 从数据库中提取记录但不在测试用例中工作。
答案 0 :(得分:1)
您的测试应该是这样的,请查看命名。你需要在'get()。
中模拟步骤findId()
@InjectMocks
Service cut;
@Mock
DictionaryValueRepo dictionaryValueRepoMock;
// Can skipped by adding a @RunWith... on Testclass
@Before
public init() {
Mockito.initMocks(this);
}
@Test
public void testgetDictionaryValueListById() {
// Prepare Data
final int testId = 1;
DictionaryValue dictionaryValue = new DictionaryValue();
dictionaryValue.setId(testId);
dictionaryValue.setValueName("Test Dictionary Value");
dictionaryValue.setValueKey("12345678");
dictionaryValue.setStatus("Active");
dictionaryValue.setCreatedOn(new Date());
dictionaryValue.setUpdatedOn(new Date());
// config mocking
Mockito.when(dictionaryValueRepo.findById(testId)).thenReturn(<VALUE>);
Mockito.when(dictionaryValueRepo.findById(testId).get()).thenReturn(dictionaryValue);
// Call yout method for Testing
cut.getDictionaryValueListById(testId);
// verifies (if wanted) + assertions....
}
答案 1 :(得分:0)
我同意LenglBoy,所以应该给他正确的答案。
你需要小心的是&#34; VALUE&#34;意思是这一行:
Mockito.when(dictionaryValueRepo.findById(testId))thenReturn(VALUE);
findById返回一个Optional,这就是你应该构建并传递给Mockito的东西。像这样:
Mockito.when(dictionaryValueRepo.findById(testId))
.thenReturn(Optional.ofNullable(dictionaryValue));
对于BD中不存在id的场景,传递Optional.empty()应该足够了。