- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我是 TDD 的新手,我正在尝试编写使用第三方库(跨平台移动开发)的可测试代码。我想进行测试以仅检查我们的业务逻辑。不用担心它们的实现。
此外,他们的库仅在 native 包装器中公开。由于使用 js 作为开发语言,我想使用 jasmine 进行测试并运行测试以仅在浏览器中检查我的业务逻辑。
以下是我想在测试时忽略/模拟的方法模式。
com.companyname.net.checkInternetAvailable(url)
com.companyname.store.getValue(key)
com.companyname.someother.name(whateverObj, callback) etc.,
此刻,我创建了一个新的 mocks.js
文件,我只是在其中写了
var com = {
"net":{},
"store":{},
"someother":{}
}
com.net.checkInternetAvailable = function(url){
//TODO: fix this!
return true;
}
我对代码中的所有方法都执行相同的操作。我尝试使用 Jasmine SpyOn(com.net, "checkInternetAvailable").and.returnValue(true)
而不是定义所有方法。这种方法的问题是我必须定义所有使用 SpyOn
的方法。
有没有更简单的方法来做到这一点?推荐的方法是什么?
最佳答案
您可以采用的一种方法是使用 Sinon javascript 测试库 stub 第三方库方法。然后可以设置这些 stub 方法来模拟使用实际第三方库难以重现的结果。然后,您的被测系统 (SUT) 可以在 Jasmine 中使用这些 stub 方法。测试。
我在这里写了一个人为的例子:
https://jsfiddle.net/Fresh/uf8owzdb/
代码如下:
// A module which has methods you want to stub
Net = (function() {
// Constructor
function Net() {
}
Net.prototype.checkInternetAvailable = function(url) {
return true;
};
return Net;
})();
// A method which is dependent on the Net module
var methodWhichUsesNet = function(net) {
return net.checkInternetAvailable();
};
// Stub the method behaviour using Sinon javascript framework.
// For the test, get it to return false instead of true.
var net = new Net();
var expectedResult = false;
sinon.stub(net, "checkInternetAvailable").returns(expectedResult);
// Assert method behaviour using a Jasmine test
describe("Net test suite", function() {
it("methodWhichUsesNet should return expected result", function() {
expect(methodWhichUsesNet(net)).toBe(expectedResult);
});
});
请注意,建议使用 stub第三方方法,因为你想准确控制它们应该返回什么,因为你知道你的代码正在使用哪些方法。或者你可以 mock如果您还想验证这些方法是否由使用它们的方法调用,请使用这些第三方方法。您可以 stub 整个第三方对象方法,例如:
var stub = sinon.stub(obj);
但是我建议不要这样做,因为这意味着测试不会那么明确,即您不确定 stub 方法的行为方式,而显式 stub 意味着您可以完全控制它们的行为。
关于javascript - 如何使用嵌套函数(javascript、jasmine)为第 3 方库编写 mock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35926113/
我有一段代码是这样的: while(count = inputStream.readLine()) != null) { //do something } 在单元测试用例中,我正在模拟 inp
我有一段代码是这样的: while(count = inputStream.readLine()) != null) { //do something } 在单元测试用例中,我正在模拟 inp
假设我在文件中具有以下命名导出 customer.ts export const saveDetails = ()=>{} export const loadDetails = ()=>{} 假设我在
我一直试图绕过dart的模拟库,但似乎我仍然不明白。 在我的库中,我有一个对外部资源的HTTP请求,我想以此模拟它不要一直依赖外部资源。 我的库中的主类如下所示: SampleClass(String
使用 postman 模拟服务器存在问题。它不响应具有路由参数的请求。例如,我的 uri 如下所示: PUT : {{server_url}}/order/{id} 但是当我以这种方式调用模拟服务器时
将任何转换器或空属性转换添加到 Jest 配置时,模拟无法正常工作。下面是简单的代码。 Jest 配置: "transform": { any regex: any transformer } 模块说
我最近一直在做一个项目,该项目已经开始变得相当依赖,并且一直在探索使用 AutoMocking 容器来清理我的测试并使其不那么脆弱的想法。 我听说过 TDD/BDD 纯粹主义者反对使用它们的论点,例如
有谁知道为什么 UsernameExists 不会返回 True。我的语法一定在某个地方搞砸了。 [TestMethod()] public void GenerateUsername
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
我得到一个 Moq 对象以在连续调用方法时返回不同的值。这是通过此扩展方法完成的: public static void ReturnsInOrder(this ISetup setup, param
rhino-mocks stub 和这里的期望有什么区别:在我看来它们的行为完全相同? mockContext.Stub(x => x.Find()) .Return(new List()
我正在尝试模拟方法 extra_get() 的调用,该方法通常返回一个字典列表。据我从模拟docs了解,如果我想返回iterable,我应该设置side_effect参数。 client.extra_
在我的 CentOS 6.2 机器的/var/lib/mock 文件夹下,我可以看到目标构建操作系统中的所有初始应用程序。如果我想添加 JDK 作为额外的应用程序,我该怎么做?谢谢! 最佳答案 只需将
我正在寻找一种让 stub 的返回值取决于其输入的干净方法。 目前我正在使用以下方法,但效果不佳。 metadataLogic.Expect(x => x.GetMake(args.Vehicle1.
我正在设置调用构建和执行查询的方法的期望。我想询问所用参数的属性。这可能吗 using (mocks.Record()) { Expect.Call(connection.Retrieve(S
有没有人有一个使用 Rhino Mocks 和 NInject 的自动模拟容器的实现? 最佳答案 好的,我使用 Moq 集成作为起点自己构建了一个。这很简单。你需要这 3 个类: public cla
使用后@patch在我的装饰器上它不再起作用了。我想进行一个失败并引发异常的调用,以便我可以检查我的装饰器是否正在捕获此异常,并正在调用某个函数。 mock do_sth_in_db让它引发异常是很容
谁能告诉我为什么下面的测试没有失败? [Test] public void uhh_what() { var a = MockRepository.GenerateMock(); a.
我找不到 Moq 和 Rhino 的具体功能比较。所有的问题都是“你更喜欢哪个以及为什么”,或者“这是你如何在 rhino 中进行简单的模拟以及如何在最小起订量中完成的”。 我在任何地方都找不到深入的
我正在尝试模拟数据存储库对象,但在 MockRepository 上设置期望后,它每次都返回 null。我的代码如下: [测试] 公共(public)无效 GetById_NotNull() { 预
我是一名优秀的程序员,十分优秀!