【发布时间】:2019-10-08 09:43:32
【问题描述】:
我想断言 MyObject 中 SalsGroupId 的值在调用 initMyObj 后是否已更改。
当我模拟 MyObject 时,我无法断言更改的值,因为它返回相同的模拟值。我知道这是 Mockito 的行为。但是如何测试呢?
@Component( "mybean" )
@org.springframework.context.annotation.Scope( value="session" )
public class MyBean {
@Autowired
private MyObject myObj;
public void initMyObj(String SalsGroupId){
if (!SalsGroupId.equals(myObj.getSalsGroupId())) {
getMyObj().setSalsGroupId(SalsGroupId); // update the SalsGroupId
getMyObj().setMyString("My STRING"); // initially this is null
}
}
public MyObject getMyObj(){
return myObj;
}
}
===== 在 Junit 测试中。
@InjectMocks
private MyBean myBean;
@Mock
private MyObject myObj;
@Test
public void initInitMyObject() {
when(myBean.getMyObj().getSalsGroupId()).thenReturn("SOME_STRING");
myBean.initMyObj("OTHER");
assertEquals("OTHER",myBean.getMyObj().getSalsGroupId()); // but the value is still "SOME_STRING"
assertEquals("My STRING",myBean.getMyObj().getMyString()); // but the value is null
}
【问题讨论】:
-
您是否调试过您的代码,以确保您确实调用了 setter?
-
@Stultuske 是的,MyObj 不为空。但它的属性是空的。 initMyObj() 之前和之后
-
我没有问 myObj 是否为空。您是否真的验证过 !SalsGroupId.equals(myObj.getSalsGroupId()) 返回 true?您是否检查过该 if 块中的代码是否已执行?
-
@Stultuske 是的。它进入 if 条件。方法没有错误。是的,我确实调试过它。
-
你永远不应该模拟数据对象!只需构造一个实例并使用它。那么事情就会变得更有意义!