Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mockito:在构造函数中监视调用(Java)_Java_Mockito - Fatal编程技术网

Mockito:在构造函数中监视调用(Java)

Mockito:在构造函数中监视调用(Java),java,mockito,Java,Mockito,这不是的副本。我正在尝试编写一个测试,以验证在我的间谍对象(mockToyFacade)的构造函数中是否调用了某些方法。 被测试的类是ToyFactoryFacade。其思想是客户机与ToyFactoryFacade(包装ToyFactory)交互以生成ToyFacades,ToyFacades本身是玩具对象的包装器 我想用Mockito验证什么? 我想验证是否正在ToyFacade上调用addToyName(toyName)和addCreationTime(creationTimestamp)

这不是的副本。我正在尝试编写一个测试,以验证在我的间谍对象(mockToyFacade)的构造函数中是否调用了某些方法。

被测试的类是ToyFactoryFacade。其思想是客户机与ToyFactoryFacade(包装ToyFactory)交互以生成ToyFacades,ToyFacades本身是玩具对象的包装器

我想用Mockito验证什么? 我想验证是否正在ToyFacade上调用addToyName(toyName)addCreationTime(creationTimestamp)。这两种方法都在ToyFacade的构造函数中调用

有什么问题吗? 当我试图监视ToyFacade并验证是否调用了上述两个方法时,我收到一个错误,它说“实际上,与此模拟没有任何交互。”当我单独调用这些方法(即,不通过构造函数)时,验证正确我不确定我做错了什么。

测试代码 源代码
您的测试没有达到预期效果,因为您试图验证的方法调用在创建spy之前已经发生。您真正想要做的是测试这两个方法调用的效果,而不是调用本身。这看起来像

verify(mockToy).addToyName("Phone");
verify(mockToy).addCreationTime(timestamp);

其中,
时间戳
是您在
设置
方法中传递的任何内容。

谢谢Dawood。正如您所指出的,我确实看到了测试这些调用对支持玩具对象(mockToy)的影响的工作与预期的一样。出于好奇,除了对被观察的mockToy对象的预期效果之外,还有什么方法可以验证对mockToyFacade的那些调用发生了吗?我不知道。如果有,你不应该用它。因为当您测试一个类时,您应该验证它对类之外发生的事情的影响。如果您发现自己正在测试类本身内部的机制,那么您就有了一种代码味道。这很有意义。谢谢这不是[class]的副本,其中有一个新的()调用,使用Mockito)这会在构造函数初始化时调用2个helper方法。我的问题是,为什么我无法验证这2个方法是否被调用。Dawood的观点是,我应该真正验证这两个调用对mockToy对象的影响,而不是验证调用是对ToyFacade spy(mockToyFacade)本身进行的。
public class ToyFactoryFacade { 
    private final ToyFactory toyFactory;
    public ToyFactoryFacade(ToyFactory toyFactory) {
      this.toyFactory = toyFactory;
    }

    public ToyFacade initializeAndGetToy(String toyName, long creationTimestamp)
    {
        getToyFacade(toyName, creationTimestamp);
    }

    // For testing.
    protected ToyFacade getToyFacade(String toyName, long creationTimestamp 
    {
        return new ToyFacade(toyFactory.newToy(), toyName, creationTimestamp);
    }
}

public class ToyFactory {
    public Toy newToy() {
     return new Toy();
    }
} 

public class ToyFacade {
    private final Toy toy;
    public ToyFacade(Toy toy, String toyName, long creationTimeStamp) {
        this.toy = toy;
        addToyName(toyName);
        addCreationTime(creationTimestamp);
  }

    public void addToyName(String name) {
        toy.addToyName(toyName);
    }

    public void addCreationTime(long timestamp) {
        toy.addCreationTime(timestamp);
    }
}

public class Toy {
    public String toyName;
    public String creationTimestamp;
    public void addToyName(String name) {
        toyName = name;
    }

    public void addCreationTime(long timestamp) {
        creationTimestamp = timestamp;
    }
}
verify(mockToy).addToyName("Phone");
verify(mockToy).addCreationTime(timestamp);