gpt4 book ai didi

java - EasyMock - 模拟具有其他类对象和 .class 作为参数的类

转载 作者:行者123 更新时间:2023-12-02 03:43:14 24 4
gpt4 key购买 nike

我目前正在使用 EasyMock 并尝试了很多方法来解决我的问题。

让我用简单的话解释一下,我总共有 5 门类(class)。

  • Main.java
  • A.java
  • B.java
  • C.java
  • 结果.java

从 Main.java 我正在调用 A.java 的方法

objectOfA.someMethod("String",objectofB, C.class);

mock 时...

expect( objectofA.someMethod( "given some String", Prepared some dummy object of B and passing , C.class ) ).andReturn( objectofResult ).anyTimes();

当我运行应用程序时,它给出了 AssersionError。

我的问题:

  1. 在expect方法中>调用objectofA.someMethod()时,第二个参数中我创建了B的一个虚拟对象,实际上B有近10个变量,其中一个是随机生成的,但是创建时我给虚拟对象赋予了自己的一些值,这会是一个问题吗?

  2. 第三个参数,我们必须传递C.class,我们如何传递这个?

  3. 最后在 andReturn() 中我传递了 objectofResult 类,在这种情况下我是否需要 parpare Result 的虚拟对象?因为在 Result.java 中我们有近 20 个变量,我很难猜测这些值。

在 Result.java 中,我只需要验证单个字符串变量值。

三天以来我做了很多尝试,请有人帮我解决这个问题。

最佳答案

我们无法告诉您什么对于您的代码来说是“正确的”;因为我们没有完整的图片(如果您发布了代码,您不应该期望有人会花时间深入研究您的所有代码)。

那么,对于你的问题:

1) +2) 我认为你搞错了。要点是:您告诉 EasyMock 您的“被测试代码”应该进行的调用。

这意味着:你告诉 EasyMock 应该调用 someMethod; EasyMock 将检查实际调用是否符合您的规范。

所以,这实际上取决于 B 类的实现。如果您的实际代码通过 someMethod() 传递的 B 对象等于您在 EasyMock staging 中提供的 B 对象;比一切都好。但如果它们不相等,那么 EasyMock 就会提示。您可以通过使用匹配器来更改它,例如

EasyMock.expect(
yourMock.someMethod(
eq("string to match"), anyObject(B.class), ...)

(其中 eq, anyObject 是 EasyMock 中的静态方法)。

但问题是:如果你使用匹配器;您必须在所有参数上使用匹配器。并且(暂时);我不知道有哪个匹配器适用于“类”参数。所以,现在我只能建议这样做:

EasyMock.expect(
yourMock.someMethod("string to match", expectedB, C.class))

其中“expectedB”是您预先设置的B对象;以便它与测试中的代码创建的内容相匹配。为了实现这一目标,您必须确保您的 B 类是一个“良好”的 equals() 方法。

3)再次;你的“虚拟结果”能做什么的问题;取决于您的测试代码将如何使用它。

示例:假设您的测试代码将在该结果对象上调用 .toString()。那么你可能需要为此做好准备;例如,通过使该结果对象......成为另一个模拟;需要调用 toString()。

长话短说:您使用 EasyMock 来指定您期望在测试类中“出现”的所有内容;并控制“流入”被测试类的所有内容。

关于java - EasyMock - 模拟具有其他类对象和 .class 作为参数的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36598451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com