Questions tagged «mocking»

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

7
如何测试或模拟“如果__name__ =='__main__'”内容
说我有一个包含以下内容的模块: def main(): pass if __name__ == "__main__": main() 我想为下半部分编写一个单元测试(我想实现100%的覆盖率)。我发现执行导入/设置机制的内置的runpy模块__name__,但无法弄清楚如何模拟或检查main()函数是否被调用。 到目前为止,这是我尝试过的: import runpy import mock @mock.patch('foobar.main') def test_main(self, main): runpy.run_module('foobar', run_name='__main__') main.assert_called_once_with()

5
如何在带有unittest setUp的python中正确使用模拟
在尝试学习TDD的过程中,尝试学习单元测试并在python中使用模拟。慢慢掌握它,但不确定我是否正确执行此操作。预先警告:由于供应商API是预编译的2.4 pyc文件,因此我正在使用python 2.4进行卡住,因此我正在使用模拟0.8.0和unittest(不是unittest2) 在“ mymodule.py”中给出此示例代码 import ldap class MyCustomException(Exception): pass class MyClass: def __init__(self, server, user, passwd): self.ldap = ldap.initialize(server) self.user = user self.passwd = passwd def connect(self): try: self.ldap.simple_bind_s(self.user, self.passwd) except ldap.INVALID_CREDENTIALS: # do some stuff raise MyCustomException 现在在我的测试用例文件“ test_myclass.py”中,我要模拟ldap对象。ldap.initialize返回ldap.ldapobject.SimpleLDAPObject,因此我认为这是我必须模拟的方法。 import unittest from ldap import INVALID_CREDENTIALS from mock import …

9
在JavaScript中模拟window.location.href
我对使用window.location.href的函数进行了一些单元测试-不理想,我宁愿将其传递给它,但在实现中是不可能的。我只是想知道是否有可能在不实际导致测试运行器页面实际转到URL的情况下模拟该值。 window.location.href = "http://www.website.com?varName=foo"; expect(actions.paramToVar(test_Data)).toEqual("bar"); 我将茉莉花用于我的单元测试框架。

1
Proxyquire,rewire,SandboxedModule和Sinon:优点和缺点
在模拟Node依赖项时,我遇到了以下库: 代理查询 重新连线 沙盒模块 诗乃 它们似乎都或多或少地在做同一件事:允许您模拟require()调用(Sinon除外,它模拟了几乎所有内容)。它们似乎都需要一些相当复杂的设置,注意传递给字符串的确切语法require-在重构过程中效果不佳。 每个图书馆的优缺点是什么?我什么时候可以选择一个?每个库都擅长的示例用例是什么?在这个领域中还有哪些其他更好的产品?

4
如何模拟通过PowerMock返回void的静态方法?
我的项目中有一些静态util方法,其中一些只是传递或引发异常。关于如何模拟具有除void以外的返回类型的静态方法,有很多示例。但是,我该如何模拟将void返回为“ doNothing()”的静态方法? 非无效版本使用以下代码行: @PrepareForTest(StaticResource.class) ... PowerMockito.mockStatic(StaticResource.class); ... Mockito.when(StaticResource.getResource("string")).thenReturn("string"); 但是,如果将其应用于StaticResourcesreturn void,则编译将抱怨when(T)不适用于void ... 有任何想法吗? 解决方法可能是让所有静态方法都返回一些Boolean成功方法,但我不喜欢这种方法。


10
模拟Java枚举以添加值以测试失败情况
我有一个或多或少像这样的枚举开关: public static enum MyEnum {A, B} public int foo(MyEnum value) { switch(value) { case(A): return calculateSomething(); case(B): return calculateSomethingElse(); } throw new IllegalArgumentException("Do not know how to handle " + value); } 并且我希望测试涵盖所有行,但是由于期望代码能够处理所有可能性,因此如果没有在开关中使用其相应的case语句,则无法提供值。 扩展枚举以添加额外的值是不可能的,并且仅模拟equals方法返回false也不会起作用,因为生成的字节码使用了幕后的跳转表来进行适当处理...所以我想使用PowerMock之类的东西也许可以实现一些黑魔法。 谢谢! 编辑: 当我拥有枚举时,我以为我可以在值上添加一个方法,从而完全避免切换问题。但是我仍然要提这个问题,因为它仍然很有趣。

5
使用Python Mock模拟功能
我正在尝试Mock使用python模拟模块的函数(返回一些外部内容)。 我在导入模块的模拟函数时遇到了一些麻烦。 例如,在util.py我有 def get_content(): return "stuff" 我想嘲笑,util.get_content以便它返回其他内容。 我正在尝试: util.get_content=Mock(return_value="mocked stuff") 如果get_content在另一个模块中被调用,它实际上似乎永远不会返回模拟对象。我在使用方法方面缺少什么Mock吗? 请注意,如果我调用以下内容,则一切正常: >>> util.get_content=Mock(return_value="mocked stuff") >>> util.get_content() "mocked stuff" 但是,如果get_content从另一个模块内部调用,它将调用原始函数而不是模拟版本: >>> from mymodule import MyObj >>> util.get_content=Mock(return_value="mocked stuff") >>> m=MyObj() >>> m.func() "stuff" 内容 mymodule.py from util import get_content class MyObj: def func(): get_content() 所以我想我的问题是-如何从我调用的模块内部调用函数的模拟版本? 看来,这from module import function可能归咎于此,因为它没有指向Mocked函数。

2
如何在HttpRequestMessage上模拟CreateResponse <T>扩展方法
我正在使用ASP.Net MVC 4 RC的ApiController,并且正在尝试对GET方法进行单元测试。 此方法使用上的CreateResponse&lt;T&gt;方法HttpRequestMessage,但我不知道如何模拟此方法或使其正常运行。 该方法的主体包含以下内容: MediaTypeHeaderValue header = new MediaTypeHeaderValue(versionedSmartBlock.ContentType); var response = Request.CreateResponse&lt;SmartBlock&gt;( HttpStatusCode.OK, versionedSmartBlock, header); 在单元测试中,我创建一个空的HttpRequestMessage: CallsController api = new CallsController( managerMock.Object, config, adapterFactoryMock.Object); api.Request = new HttpRequestMessage( HttpMethod.Get, "http://localhost/Initiate?ern=%2B44123456789"); var response = api.Get("+44123456789", null); 但这只会生成一个InvalidOperationException: 该请求没有关联的配置对象,或者提供的配置为空。 有没有人知道如何配置,HttpRequestMessage以便该CreateResponse方法真正发挥作用?

7
模拟Asp.net-mvc控制器上下文
因此,控制器上下文取决于一些asp.net内部。有什么方法可以完全模拟这些以进行单元测试?当我只需要,例如Request.HttpMethod返回“ GET”时,似乎很容易用大量设置阻塞测试。 我已经在网上看到了一些例子/帮助者,但其中有些是过时的。认为这将是保持最新和最佳状态的好地方。 我正在使用最新版本的犀牛模拟

2
在Moq Callback()调用中设置变量值
我想我可能对Moq回调方法的语法有些困惑。当我尝试做这样的事情: IFilter filter = new Filter(); List&lt;IFoo&gt; objects = new List&lt;IFoo&gt; { new Foo(), new Foo() }; IQueryable myFilteredFoos = null; mockObject.Setup(m =&gt; m.GetByFilter(It.IsAny&lt;IFilter&gt;())) .Callback( (IFilter filter) =&gt; myFilteredFoos = filter.FilterCollection(objects)) .Returns(myFilteredFoos.Cast&lt;IFooBar&gt;()); 抛出异常,因为myFilteredFoos在Cast&lt;IFooBar&gt;()调用期间为null 。这不是我期望的那样吗?我认为FilterCollection会被调用,然后myFilteredFoos将为非null并允许强制转换。 FilterCollection不能返回空值,这使我得出不被调用的结论。另外,当我这样声明时myFilteredFoos: Queryable myFilteredFoos; Return调用抱怨myFilteredFoos可能在初始化之前使用。
69 c#  .net  unit-testing  mocking  moq 

5
EasyMock:无效方法
我有一个方法,该方法在要测试的类的依赖项的类中返回void。 此类非常庞大,我仅使用其中的一种方法。我需要替换该方法的实现以进行测试,因为我希望它做一些不同的事情,并且需要能够访问该方法接收的参数。 我在EasyMock中找不到做到这一点的方法。我想我知道如何使用Mockito做到这一点,doAnswer但是除非绝对必要,否则我不想添加其他库。
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.