Questions tagged «mocking»

模拟和伪造是隔离代码或组件的方法,以确保单元测试仅针对可测试的代码单元运行,而无需实际利用其他组件或应用程序的依赖项。模拟与伪造的不同之处在于,可以检查模拟以断言测试结果。


8
如何对需要其他模块的Node.js模块进行单元测试,以及如何模拟全局require函数?
这是一个简单的示例,它说明了我的问题的症结所在: var innerLib = require('./path/to/innerLib'); function underTest() { return innerLib.doComplexStuff(); } module.exports = underTest; 我正在尝试为此代码编写单元测试。如何在innerLib不require完全嘲笑功能的情况下嘲笑对的要求? 因此,这是我试图模拟全局变量,require并发现即使这样做也不起作用: var path = require('path'), vm = require('vm'), fs = require('fs'), indexPath = path.join(__dirname, './underTest'); var globalRequire = require; require = function(name) { console.log('require: ' + name); switch(name) { case 'connect': case indexPath: return globalRequire(name); …

8
我该如何模拟在AngularJS Jasmine单元测试中返回诺言的服务?
我有myService那个用途myOtherService,它可以进行远程调用,并返回promise: angular.module('app.myService', ['app.myOtherService']) .factory('myService', [ myOtherService, function(myOtherService) { function makeRemoteCall() { return myOtherService.makeRemoteCallReturningPromise(); } return { makeRemoteCall: makeRemoteCall }; } ]) 要对myService我进行单元测试,需要模拟myOtherService,以使其makeRemoteCallReturningPromise方法返回promise。这是我的方法: describe('Testing remote call returning promise', function() { var myService; var myOtherServiceMock = {}; beforeEach(module('app.myService')); // I have to inject mock when calling module(), // and module() should come …

9
如何在Mockito中正确匹配varargs
我一直在尝试使用Mockito模拟具有vararg参数的方法: interface A { B b(int x, int y, C... c); } A a = mock(A.class); B b = mock(B.class); when(a.b(anyInt(), anyInt(), any(C[].class))).thenReturn(b); assertEquals(b, a.b(1, 2)); 这不起作用,但是如果我改为这样做: when(a.b(anyInt(), anyInt())).thenReturn(b); assertEquals(b, a.b(1, 2)); 尽管我在对方法进行存根时已经完全省略了varargs参数,但这仍然有效。 有什么线索吗?

2
在Mockito中检测到未完成的存根
运行测试时出现以下异常。我正在使用Mockito进行嘲笑。Mockito库提到的提示无济于事。 org.mockito.exceptions.misusing.UnfinishedStubbingException: Unfinished stubbing detected here: -> at com.a.b.DomainTestFactory.myTest(DomainTestFactory.java:355) E.g. thenReturn() may be missing. Examples of correct stubbing: when(mock.isOk()).thenReturn(true); when(mock.isOk()).thenThrow(exception); doThrow(exception).when(mock).someVoidMethod(); Hints: 1. missing thenReturn() 2. you are trying to stub a final method, you naughty developer! at a.b.DomainTestFactory.myTest(DomainTestFactory.java:276) .......... 来自的测试代码DomainTestFactory。当我运行以下测试时,我看到了异常。 @Test public myTest(){ MyMainModel mainModel = Mockito.mock(MyMainModel.class); Mockito.when(mainModel.getList()).thenReturn(getSomeList()); // …
150 java  mocking  mockito 

9
根据输入参数模拟python函数
我们已经将Mock用于python已有一段时间了。 现在,我们要模拟一个函数 def foo(self, my_param): #do something here, assign something to my_result return my_result 通常,模拟此方法的方式是(假设foo是对象的一部分) self.foo = MagicMock(return_value="mocked!") 即使我多次调用foo(),我也可以使用 self.foo = MagicMock(side_effect=["mocked once", "mocked twice!"]) 现在,我面临一种情况,当输入参数具有特定值时,我想返回一个固定值。因此,如果说“ my_param”等于“ something”,那么我想返回“ my_cool_mock” 这似乎可以在python的嘲笑上使用 when(dummy).foo("something").thenReturn("my_cool_mock") 我一直在寻找如何通过Mock实现相同的目标而没有成功? 有任何想法吗?

5
Rhino Mocks上的模拟和存根之间有什么区别?
我对此玩的还不够,通常使用模拟,但是我想知道两者之间的区别以及何时在Rhino Mocks上使用一个或另一个。 更新: 我也用Ayende的话找到了我问题的答案: 存根和模拟的区别 您可以在本文中获得以下术语的实际定义:Mocks Are n't Stubs。我想从Rhino Mocks的角度着眼于差异。 模拟是可以设置期望值的对象,它将验证期望的动作确实已经发生。存根是您用来传递给被测代码的对象。您可以对它设置期望,以便它以某些方式起作用,但是这些期望永远不会得到验证。存根的属性将自动表现为正常属性,并且您无法对它们设置期望。 如果要验证被测代码的行为,将使用具有适当期望值的模拟并进行验证。如果您只想传递可能需要以某种方式起作用但不是测试重点的值,则可以使用存根。 重要说明:存根永远不会导致测试失败。

14
您如何在C#中模拟文件系统以进行单元测试?
Наэтотвопросестьответына 堆栈溢出нарусском:混帐-服务器主机密钥不被缓存 是否有任何库或方法可以模拟C#中的文件系统以编写单元测试?在我目前的情况下,我有一些方法来检查某些文件是否存在并读取创建日期。将来我可能会需要更多。
149 c#  unit-testing  mocking 


5
使用Request.CreateResponse的ASP.NET WebApi单元测试
我正在尝试为ApiController编写一些单元测试,并且遇到了一些问题。有一个很好的扩展方法,称为Request.CreateResponse,它对生成响应有很大帮助。 public HttpResponseMessage Post(Product product) { var createdProduct = repo.Add(product); return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct); } 有什么方法可以模拟CreateResponse,而无需使用部分模拟或直接使用“ new HttpResponseMessage(...)”?

6
Go中的模拟功能
我正在通过编写一个小型个人项目来学习Go。尽管体积很小,但我还是决定进行严格的单元测试,以便从一开始就学习Go的良好习惯。 琐碎的单元测试都很好,很花哨,但是现在我对依赖项感到困惑;我希望能够用模拟函数替换一些函数调用。这是我的代码片段: func get_page(url string) string { get_dl_slot(url) defer free_dl_slot(url) resp, err := http.Get(url) if err != nil { return "" } defer resp.Body.Close() contents, err := ioutil.ReadAll(resp.Body) if err != nil { return "" } return string(contents) } func downloader() { dl_slots = make(chan bool, DL_SLOT_AMOUNT) // Init the …
147 unit-testing  mocking  go 

7
如何模拟导入
模块A包括import B在其顶部。然而在试验条件下,我想嘲笑 B的A(模拟A.B)和进口完全避免B。 实际上,B并不是故意在测试环境中安装的。 A是被测单元。我必须导入A所有功能。B是我需要模拟的模块。但是,如果第一件事就是导入,我该如何B在其中模拟A并停止A导入实数?BAB (未安装B的原因是我使用pypy进行了快速测试,但不幸的是B尚未与pypy兼容。) 怎么办呢?

11
如何获取PHPUnit MockObjects以基于参数返回不同的值?
我有一个PHPUnit模拟对象,'return value'无论其参数是什么,它都会返回: // From inside a test... $mock = $this->getMock('myObject', 'methodToMock'); $mock->expects($this->any)) ->method('methodToMock') ->will($this->returnValue('return value')); 我想要做的是根据传递给模拟方法的参数返回一个不同的值。我已经尝试过类似的方法: $mock = $this->getMock('myObject', 'methodToMock'); // methodToMock('one') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('one')) ->will($this->returnValue('method called with argument "one"')); // methodToMock('two') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('two')) ->will($this->returnValue('method called with argument "two"')); 但这会导致PHPUnit抱怨,如果未使用参数调用模拟'two',那么我认为methodToMock('two')覆盖的定义会覆盖第一个的定义。 所以我的问题是:有没有办法让PHPUnit模拟对象根据其参数返回不同的值?如果是这样,怎么办?

5
模拟与魔术模拟
我的理解是MagicMock是Mock的超集,它自动执行“魔术方法”,从而无缝地提供对列表,迭代等的支持。那么,为什么存在普通Mock的原因是什么?难道这不是MagicMock的简化版本,实际上可以忽略吗?Mock类是否知道MagicMock中没有的任何技巧?
138 python  mocking 

5
使用Mockito时,嘲笑和间谍有什么区别?
使用Mockito间谍的用例是什么? 在我看来,每个间谍用例都可以使用callRealMethod进行模拟处理。 我可以看到的一个区别是,如果您希望大多数方法调用都是真实的,则可以节省一些代码行以使用模拟与间谍。是这样还是我错过了更大的前景?
137 java  testing  mocking  mockito 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.