我有一个数据库操作对象作为我的UUT(被测试单元)的依赖项。因此,我希望将其作为严格的mock,因为我还希望确保UUT不调用任何其他可以导致db更改的方法。
在rhino mocks中,我做了以下操作:
然而,当我想在FakeItEasy中这样做时,却找不到没有代码重复的情况下如何做。我尝试将CallsTo()+musthaveHappence()部分放入安排中,但随后我的测试失败了。如果我将CallsTo()+musthaveHappend()部分放在Assert中,那么我的测试也会失败,因为对严格的fake进行了意外调用。这可以在不将CallsTo调用同时放入安排和断言的情况下完成吗?
虽然@jimmy_keen的回答会奏效(我甚至支持它),但FakeItEasy的一个更惯用的用法是:
// Arrange
var service = A.Fake<IService>(o => o.Strict()); // only allows configured calls
A.CallTo(() => service.PostData("data")).DoesNothing(); // allow a specific call
// Act
testedObject.CallService("data");
// Assert
A.CallTo(() => service.PostData("data")).MustHaveHappened(Repeated.Exactly.Once);
---更新---
在https://github.com/fakeiteasy/fakeiteasy/issues/198#issuecomment-29145440的@blairconrad的帮助下,我认为这是最简单的方法,没有重复:
// Arrange
var service = A.Fake<IService>(o => o.Strict()); // only allows configured calls
var expectedCall = A.CallTo(() => service.PostData("data"));
expectedCall.DoesNothing(); // allow the call
// Act
testedObject.CallService("data");
// Assert
expectedCall.MustHaveHappened(Repeated.Exactly.Once);
您可以通过以下验证来实现此目的:
var service = A.Fake<IService>();
testedObject.CallService("data");
// verify your specific call to .PostData
A.CallTo(() => service.PostData("data")).MustHaveHappened(Repeated.Exactly.Once);
// verify that no more than 1 call was made to fake object
A.CallTo(service).MustHaveHappened(Repeated.Exactly.Once);
a.callTo(object)
重载允许您对所有和任何假对象方法进行通用设置/验证。
Rhino 是用纯 Java 写成的 JavaScript 的开放源代码实现。它最常被用于嵌入 Java 应用程序,以便为终端用户提供脚本的能力。 在线Javadoc:http://www.ostools.net/apidocs/apidoc?api=rhino
问题内容: 我正在尝试让require.js在Java 6和Rhino的服务器端加载模块。 我能够加载require.js本身就好。Rhino可以看到该功能。我之所以说是因为Rhino抱怨说,当我改成其他东西时,它找不到该功能。 但是当我尝试甚至需要一个简单的JS时,例如 使用以下任一方法: 它不起作用。我懂了 我在Java类路径的顶部。那也是我的所在。我尝试将移动到我认为可能会到的任何地方,包括
我试图在测试中模拟一个调用,但我得到了一个错误,因为它调用了真正的方法,而不是模拟它。 这是我的方法 } 这是我的测试课 测试实际上调用了受保护的方法config Setter,并在设置代理时失败。帮助我理解我在这里做错了什么。
问题内容: 我对模拟还很陌生,并且我一直在尝试模拟实际内容(本质上仅在内存中创建一个虚拟文件),以便在任何时候都不会将任何数据写入磁盘。 我尝试过模拟文件和模拟尽可能多的属性的解决方案,然后还使用文件写入器/缓冲写入器将其写入,但是这些方法不能很好地工作,因为它们需要规范路径。有人找到了除此以外的解决方案,但我正在解决这个错误? 我一直在这样做: 任何想法或指导都将非常有帮助。在此之后的某个地方,
出于学校目的,我正在创建一个使用股票API的应用程序。 我正在尝试为一种获取过去10年所有股票数据的方法编写一个测试。我不想实际获取所有这些数据,而是想抛出一个异常。 我想测试的方法: 股票时间系列(....)调用可以抛出阿尔法仓位异常。 我这样嘲弄了TimeSeries类: 在我的测试类中,我想模拟这个调用,并返回一个异常而不是实际数据。 无论我多么试图嘲笑这段代码,它永远不会抛出异常。它将始终
问题内容: 我们要模拟的其中一个Java类中有一个URL对象,但这是最后一个类,因此不能。我们不想上一个级别,并模拟InputStream,因为这仍然会使我们留下未经测试的代码(我们有严格的测试覆盖率标准)。 我已经尝试过jMockIt的反射功能,但是我们在Mac上工作,并且Java代理处理程序存在我无法解决的问题。 那么,有没有不涉及在junit测试中使用真实URL的解决方案? 问题答案: 当我