问题标签 [jmockit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5942 浏览

java - 在ant中设置javaagent

我正在尝试从 Ant 脚本运行 JUnit 测试。测试使用 JMockit 模拟框架,对于 Java 5,需要将其指定为 javaagent 才能正确运行。这是我正在运行的脚本:

我有一种感觉,我没有正确设置 javaagent。带有此异常的测试错误:

我的 javaagent 设置是否正确?如果是,还有什么可能导致此错误?

0 投票
2 回答
1824 浏览

java - 在 JMockit 中验证部分有序的方法调用

我正在尝试编写一个单元测试(使用 JMockit)来验证方法是根据部分顺序调用的。具体用例是确保在事务中调用某些操作,但更一般地说,我想验证这样的事情:

  • 方法beginTransaction被调用。
  • operation1通过 to的方法以operationN任意顺序调用。
  • 方法endTransaction被调用。
  • someOtherOperation在事务之前、期间或之后的某个时间调用方法。

期望和验证 API 似乎无法处理此要求。

如果我有,@Mocked BusinessObject bo我可以验证是否调用了正确的方法(以任何顺序):

可以选择FullVerifications检查是否没有其他副作用。

要检查排序约束,我可以执行以下操作:

但这不处理这种someOtherOperation情况。我无法替换为unverifiedInvocationsbo.operation1(); bo.operation2()因为这会对调用进行总排序。业务方法的正确实现可以调用bo.operation2(); bo.operation1().

如果我做到了:

someOtherOperation然后在事务之前调用时出现“没有未验证的调用”失败。尝试bo.someOtherOperation(); minTimes = 0也无济于事。

那么:有没有一种简洁的方法来使用 JMockIt 中的 Expectations/Verifications API 来指定方法调用的部分排序要求?或者我是否必须使用 aMockClass并手动跟踪调用,a la

0 投票
1 回答
6309 浏览

java - JMockit - two mocked instances of the same type

I'm using the JMockit framework and I'm trying to test my simple EventBus implementation which allows EventHandlers to be registered for Event types. When an event is fired on the event bus, all registered handlers get notified. An event can be consumed by an event handler which will cause that subsequent handlers will NOT be notified of the event.

My test method looks like this:

When I try to run this code I get the following exception:

The exception occurs on the line times = 0 and I don't know why since the type secondHandler should be mocked because it's passed as a parameter to the test method. Adding @Mocked or @Injectable to the parameter makes no difference.

If I make a standard class from the firstHandler, which will just consume the event, and then test the code, everything runs just fine. But in that case I can't verify explicitly that the firstHandler's method handleEvent is called because it's not a mocked type anymore.

Any help is much appreciated, thanks!

0 投票
1 回答
353 浏览

fitnesse - 将 jmockit 与 FitNesse 一起使用

我无法让 FitNesse 与 jmockit 配合得很好。

我正在使用 FitNesse 的 v20110104 版本和 jmockit 的 0.999.9 版本。

我抛出了一些 ClassDefNotFound 异常,但通过将以下内容添加到我的 FitNesse 根目录中解决了这些异常:

这是我的 jmockit jar 的位置。但是,现在我使用 jmockit 的测试挂在“运行”状态,永远不会返回。

我在一些 FitNesse 板上四处询问,并尝试像这样更改命令模式:

这定义了类路径(%p 代表所有定义的路径变量,%m 代表主要的 java 方法)

这可以防止测试挂起,但我得到一个新的异常:

我找不到有关此异常的太多信息。

有没有人获得最新版本的 jmockit 与 FitNesse 合作?

0 投票
1 回答
6797 浏览

java - JMockit | 试图根据参数定义不同的返回值但得到意想不到的结果

我有一个像下面这样的类:

现在,我使用 jMockit 通过模拟类来测试上述功能DAO

这就是我的测试类的样子:

现在,似乎关于getData()掩盖第一个期望的第二个期望,即模拟对象的行为就好像我从未在期望中声明第一行(处理的那些sql1):

第一次调用getData()返回空集合,而不是我初始化的值resultToSql1。第二次调用resultToSql2按预期返回。

如果我评论以下行:

第一个调用返回我定义的 - resultToSql1,第二个返回空集合。这是有道理的。

那么,我做错了什么??如何getData()根据调用的参数定义两个不同的返回值?

任何帮助,将不胜感激。

谢谢!

0 投票
2 回答
1210 浏览

java - 如何防止超类被jmockit嘲笑?

给定一个如下所示的类层次结构:

我正在尝试测试 Car 类。但是,Car 也恰好使用 Bus。所以,在我的测试中,我试图模拟 Bus。我的测试代码如下所示:

断言失败,因为car.getName()返回 null。

通过在 Vehicle、Car 和 Bus 的构造函数中插入System.out.println's,我怀疑加载的“真实”Vehiclenew Car(name)稍后会在执行时被模拟的 Vehicle 替换@Mocked Bus bus

jmockit 有没有办法在构建 Car 时保留“实例化”的真实车辆?

0 投票
1 回答
493 浏览

java - 模拟接口为空

我正在尝试使用 JMockit 模拟 DAO:

使用这个测试类:

当在 Expectations 块中使用 dao 对象时,会抛出 NPE。我尝试将 dao 的声明移动到使用 @Mocked 注释的成员变量,但同样的事情发生了。我也尝试过使用 MyDao 的具体实现,并且发生了同样的事情。

0 投票
2 回答
1517 浏览

java - 模拟模拟方法的副作用

我在一个类中有一个方法会对该方法的参数产生副作用:

并且正在测试这个类:

我使用 JMockit 的测试方法:

0 投票
0 回答
2106 浏览

unit-testing - 将 @Autowired 与 JMockit 一起使用会使 @Autowired 对象为空

我意识到还有另一个 SO question 可以处理这个确切的问题(here)。但是,它不适用于我的情况。

我有一个使用 spring 的 maven (web/frontend) 项目。我已经通过 pom 将 jmockit 添加到 jvm 中:

SUT(缩写)如下所示:

现在,我真的很想FooUtils在我的测试中模拟出这个实例。按照这个 SO question中给出的建议,我尝试了:

唉,unitUnderTest以及fooare both null,导致这种情况发生:

  • 这是非常出乎意料的,因为我希望new MockUp<...>{}.getMockInstance()返回一些对象。

我想我只是错过了一些关键部分,但是哪个?

0 投票
1 回答
243 浏览

java - JMockit 和传递引用。我们中的一个人一定是错的(可能是我!)

如果有人能帮助我解决我最近一直在解决的这个问题,我将不胜感激。我试图模拟一个采用双精度和日历的方法,并返回一个由日历的值确定的整数。模拟定义如下:

模拟已设置(调用 toString() 返回正确的文本),但 applyInflation 方法对上述循环的最后一次迭代以外的所有内容都返回零(即当您传入月份 new GregorianCalendar(2010) 时它返回 2 ,2,1)。

我得出的结论是,标记为 AAA 的线没有我认为应该的效果。它似乎没有将指针更改为指向“月”的新副本,我可以修改它而不影响模拟期望设置的“月”的内容。要么,要么 JMockit 没有像我想象的那样记录模拟。

请帮忙!请告诉我哪里出错了。我真的很想知道这里发生了什么,因为要么我对 Java 的理解存在根本缺陷,要么 JMockit 实现的行为不符合它“应该”的方式(据我说:))。或者我犯了一个真正的小学生错误,开始的两个晚上都没有发现......

谢谢你。