如何覆寫在方法中實體化的類并需要獲取未設定的值。
這是我的服務類 DemoClass.Java
public class DemoClass{
public void methodOne(){
ClassTwo classTwo=new ClassTwo();
classTwo.setName("abc");
customerRepo.save(classTwo);
ClassThree classThree=new ClassThree();
classThree.setId(classTwo.getId()); //here causing NullPointerException as ClassTwo is instantiated inside the method and the id value is not set and the test stops here.
classThree.setName("person1");
classThree.setUpdatedBy("person2");
}
}
由于 classTwo 在方法級別實體化,因此測驗方法不會獲取 getId()。我無法更改或向 Controller 類添加任何內容。測驗在該行停止并導致 NullPointerException,因為它不知道 classtwo.getId() 的值,因為它沒有設定。我需要在測驗類中覆寫/通過該行。我也試過嘲笑那個班級和間諜。任何可用于此的 Mockito 解決方案。
ClassTwo 中的 Id 是自動生成的序列號,因此無需在 DemoClass.Java 中設定
這是我的測驗類 DemoClassTest.Java
@RunWith(MockitoJunitRunner.Silent.class)
public void DemoClassTest(){
@InjectMocks
DemoClass demoClass;
@Test
public void testMethodOne(){
demoClass.methodOne()
}
uj5u.com熱心網友回復:
你可以提供一個customerRepo測驗替身,只設定一些特定id的classTwo:
public class TestCustomerRepo extends CustomerRepo {
public void save(ClassTwo classTwo) {
classTwo.setId(4711L);
}
}
但是由于您似乎正在測驗 JPA 代碼,因此執行包含實際資料庫的集成測驗可能是一個更好的主意。
uj5u.com熱心網友回復:
我通常這樣做:
long testId = 123;
Mockito.when(customerRepo.save(Mockito.any())).thenAnswer(i -> {
ClassTwo entity = (ClassTwo)invocation.getArgument(0);
entity.setId(testId);
return entity;
});
如果您想在 ClassThree 物體上斷言某些內容,請在 ClassThree 存盤庫模擬上執行 Mockito.verify。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/336062.html
上一篇:無法更新學生資料
