如何使用 Mockito 的anyCollectionOf()

发布于 2024-11-15 11:29:44 字数 703 浏览 2 评论 0原文

此线程上的答案建议使用 anyCollectionOf() 但我无法让它工作 Mockito:使用通用参数进行验证

我有一个通用类,用于保存两个“版本”用于比较目的的相同对象

public class ChangedVO<T> {

private T before;
private T after;

/*** Constructors ***/

public ChangedVO() {}

public ChangedVO(T before, T after) {
    this.before = before;
    this.after = after;
}

/*** Getters & setters ***/

...
}

现在在我的 UnitTest 中,以下代码“确实”工作......

verify(emailService, never()).sendBookChangesEmail(Matchers.<List<ChangedVO<BookVO>>>any());

但是我有兴趣知道如何使用 anyCollectionOf() 实现相同的事情?

An answewr on this thread suggested using anyCollectionOf() however I cannot get it to work
Mockito: Verifying with generic parameters

I have a Generic Class for holding two "versions" of the same object for comparison purposes

public class ChangedVO<T> {

private T before;
private T after;

/*** Constructors ***/

public ChangedVO() {}

public ChangedVO(T before, T after) {
    this.before = before;
    this.after = after;
}

/*** Getters & setters ***/

...
}

Now in my UnitTest the following code "does" work...

verify(emailService, never()).sendBookChangesEmail(Matchers.<List<ChangedVO<BookVO>>>any());

...however I'm interested to know how the same thing can be achieved using anyCollectionOf() ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

棒棒糖 2024-11-22 11:29:44

Mockito 与泛型的有趣使用。我认为在这种情况下可以使用 anyListOf() 的唯一方法是键入

verify(emailService, never()).sendBookChangesEmail(anyListOf((Class<ChangedV0<BookV0>>) null));

而不是传递类实例,而是将其传递为 null。这不是文档所说的应该使用 anyListOf() 的方式,但在这种特定情况下它似乎可以工作。

问题是 Java 中的泛型类型擦除,这使得您无法在运行时区分 的实例

Class<ChangedV0<BookVO>> or
Class<ChangedV0>

,因此您无法创建任何静态符合

Class<ChangedV0<BookVO>>

Interesting use of Mockito with generics. The only way I think you can use anyListOf() in this situation is by typing

verify(emailService, never()).sendBookChangesEmail(anyListOf((Class<ChangedV0<BookV0>>) null));

Instead of passing a class instance you pass it null. This is not how the documentation says you shoud use anyListOf() but in this specific situation it seems to work.

The problem is generic type erasure in Java which makes that you can not differentiate between an instance of

Class<ChangedV0<BookVO>> or
Class<ChangedV0>

during runtime and therefore there is no way you can create anything that statically conforms to

Class<ChangedV0<BookVO>>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文