我正在为以下课程编写单元测试
要测试的类:
public class RandomManager {
@Autowired
private ApplicationContext context;
@Autowired
private ClassA objectA;
public void methodToBeTested() {
objectA.methodToBeVerified(context.getBean(Random.class,"Yaswanth","Yaswanth"));
}
}
以下是测试类:
public class RandomManagerTest {
@Mock
private ClassA objectA;
@Mock
private ApplicationContext context;
@InjectMocks
private RandomManager randomManager;
@BeforeTest
public void before() {
MockitoAnnotations.initMocks(this);
doReturn(any(Random.class)).when(context)
.getBean(any(Class.class), any(), any());
}
@Test
public void methodToBeTestedTest() {
Random randomObject = new RandomObject("Yaswanth", "Yaswanth");
randomManager.methodToBeTested();
verify(objectA).methodToBeVerified(randomObject);
}
}
当我尝试存根时,上面的代码在before方法中失败了 applicationContext mock。我收到以下错误。
您不能在验证或存根之外使用参数匹配器。 正确使用参数匹配器的示例: 当(mock.get(anyInt()))thenReturn(空)。 doThrow(new RuntimeException())。when(mock).someVoidMethod(anyObject()); 验证(模拟).someMethod(含有("富&#34))
如果是最后一个,则在NullPointerException之后可能会出现此消息 matcher返回一个像any()但是stubbed方法的对象 签名期望一个原始参数,在这种情况下,使用原语 备择方案。 当(mock.get(任何())); //使用不当,会引发NPE 当(mock.get(anyInt())); //正确使用
此外,此错误可能会显示,因为您使用参数匹配器 无法模拟的方法。以下方法不能 stubbed / verified:final / private / equals()/ hashCode()。嘲弄方法 不支持在非公共父类上声明。
任何人都可以帮助我理解我做错了什么 上面的代码?
注意:我正在使用TestNG和Mockito。我可以扩展
AbstractTestNGSpringContextTests
并使用spring-test.xml
,声明我的
bean和autowire applicationContext。我觉得这太过分了
我的用例。我只需要模拟applicationContext的getBean方法。
答案 0 :(得分:1)
问题来自doReturn(any(Random.class))
,您无法使用any()
。
只需用真实实例替换它。