我有个问题。也许这是非常基本的。我们可以这样做吗
而不实际调用我们测试类中的方法?
我的测试类:
class Test{
Action action=new Action();
@Mock
Provider provider;
when(provider.getNames()).thenReturn(Arrays.asList("names"));
verify(provider,atLeastOnce()).getNames();
action.update();
}
如您所见,“提供者”只被嘲笑而没有被显式调用。调用它的唯一方法是当我调用action.update()时;我得到了错误
通缉但未调用:实际上,与此模拟没有任何交互。provider.get名称()
class Action{
public void update(){
Provider provider = new Provider();
List<String> l=provider.getNames();
}
}
您的操作顺序错误。如果在调用action.update()
时调用了提供程序
,那么您应该在调用action.update()
后验证:
when(provider.getNames()).thenReturn(Arrays.asList("names"));
action.update(); // Do action first
verify(provider,atLeastOnce()).getNames(); // Then verify outcome of "action"
更新
您的代码当前不可测试:
public void update(){
Provider provider = new Provider();
List<String> l=provider.getNames();
}
您的代码表示“当调用update时,创建一个新的提供程序并在该提供程序上调用getNames”。你的测试说“断言这个与动作交互的随机提供者被称为”,这当然永远不会通过。
您需要使用依赖注入来传递要用于验证交互的提供程序。
要么将提供者传递给函数:
public void update(Provider provider){
List<String> l=provider.getNames();
}
所以你可以这样测试:
action.update(provider)
verify(provider).getNames()
或通过构造函数传递提供者:
class Action {
private final Provider mProvider;
// Default constructor can be used in main app as usual
public Action() {
this(new Provider())
}
// Argument constructor can receive a provider that can be mocked
public Action(Provider provider) {
mProvider = provider;
}
public void update(){
// Provider provider = new Provider(); // Don't do this
List<String> l = mProvider.getNames(); // Use constructor provided object
}
然后您可以测试:
@Test
public void test() {
Action action = new Action(provider); // Inject mock
action.update();
verify(provider).getNames(); // Now our mock will get called
}
我是Mockito的新手,正在尝试模拟服务方法。但是,Mockito无法正确模拟函数。 以下是部分测试代码: 课程: 我期待返回一个非空列表。但是,它返回了一个空列表。有人能帮忙吗?
我尝试了例外情况下给出的解决方案:mockito想要但没有调用,实际上与这个mock没有任何交互,而这个mockito也想要但没有调用:实际上,与这个mock没有任何交互但仍然得到相同的错误。我是不是漏掉了什么?以下是me的实现:-
原因:context.startForegroundService()随后没有调用service.startForeground() 我希望服务不显示任何通知给用户和完成它的任务,而不会被杀死。在构建版本>26中,这可能吗?
下面是我要测试的代码类 我的测试类
问题内容: 您能帮忙检查一下为什么doFilter没有被调用吗 web.xml: 类签名: 调用http:// localhost:8080 / hello / world时 返回404 ,我在doFilter处设置了断点,看来doFilter没有被调用?(我尝试了tomcat 6.0.18、6.0.29,jdk1.6) 问题答案: 在以下情况下将不会调用该过滤器: 过滤器类在类路径中丢失和/或不
在执行以下步骤后,我得到了错误:想要但没有调用:实际上,与这个模拟没有任何交互。我不明白我在这里遗漏了什么。