要测试的类
public class KnockoutValidation {
public boolean runFormValidation(String param1, boolean param1, final String param3) {
//...
AccessBeanFactory fact = new AccessBeanFactory();
AccessBean bean = (AccessBean) fact.getAccessBean("abc", "xyz");
//....
}
}
测试类
@RunWith(MockitoJUnitRunner.class)
public class KnockOutValidationTest {
@InjectMocks
KnockoutValidation KnockoutValidationMock;
@Mock
AccessBeanFactory factMock;
AccessBean accessBean;
@Before
public void setUp() {
accessBean = new AccessBean();
when(factMock.getAccessBean(anyString(), anyString())).thenReturn(accessBean);
}
@Test
public void doKnockoutValidationTest() {
Boolean result = KnockoutValidationMock.runFormValidation("a", true, "c");
Assert.assertEquals(result, true);
}
}
即使在模拟之后它也会调用实际的实现并抛出异常并得到
java.lang.NullPointerException
理想情况下,当我们模拟它时它不应该执行实际的方法,这里它进入 getAccessBean 方法,这又是一个带有大量 try 和 catch block 的大型 API。所以它内部某处抛出异常。
我只是想知道为什么模拟不起作用以及如何模拟这种类型的转换方法
最佳答案
我相信你编写实现的方式,不可能的原因是
AccessBeanFactory fact= new AccessBeanFactory();
相反你可以
@Autowired private AccessBeanFactory fact;
问题:- 每次您使用新创建的对象(而不是模拟对象)调用 fact.getAccessBean 而 bean 不可用时。所以它确实像预期的那样抛出 NPE
关于java - 如何模拟类型转换的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58909397/