Tag: 嘲笑

我怎样才能用Jest模拟一个ES6模块导入?

我开始认为这是不可能的,但我仍然要问。 我想testing一个我的ES6模块以特定的方式调用另一个ES6模块。 与茉莉花这是超级简单 – 应用程序代码: // myModule.js import dependency from './dependency'; export default (x) => { dependency.doSomething(x * 2); } 和testing代码: //myModule-test.js import myModule from '../myModule'; import dependency from '../dependency'; describe('myModule', () => { it('calls the dependency with double the input', () => { spyOn(dependency, 'doSomething'); myModule(2); expect(dependency.doSomething).toHaveBeenCalledWith(4); }); }); 与Jest相当的是什么? 我觉得这是一件很简单的事情,但我一直在试图弄清楚自己的头发。 我最接近的是用require s来replaceimport ,并将它们移动到testing/函数中。 […]

你如何嘲笑一个密封课?

嘲笑封闭式课程可能会非常痛苦。 我目前喜欢一个适配器模式来处理这个问题,但一些关于只是保持感觉怪异。 那么,嘲笑密封课程的最好方法是什么? Java的答案是值得欢迎的 。 事实上,我预计Java社区已经处理了更长的时间,并且提供了很多东西。 但是这里有一些.NET的意见: 为什么鸭子键入问题的C#开发人员 创build密封和其他types的包装嘲笑 WCF(和Moq)的unit testing

基于input参数嘲笑python函数

我们一直在使用Mock for python。 现在,我们有一个想嘲笑一个function的情况 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!"]) 现在,我面临的情况是,当input参数具有特定的值时,我想返回一个固定值。 所以,如果让我们说“my_param”等于“东西”,那么我想返回“my_cool_mock” 这似乎是在Python的mockito上可用 when(dummy).foo("something").thenReturn("my_cool_mock") 我一直在寻找如何达到与Mock一样没有成功? 有任何想法吗?

如何匹配Mockito传递给Class <T>的参数的null

我有这样的方法: public <T> method(String s, Class<T> t) {…} 我需要检查在使用其他参数的匹配器时将null传递给第二个参数,我一直这样做: @SuppressWarnings("unchecked") verify(client).method(eq("String"), any(Class.class)); 但有没有更好的办法(没有压制警告)? T表示其他一些方法的返回types,有时是void ,在这种情况下,传入null 。

Google Mock是一个好的嘲讽框架吗?

我是我公司开拓性的unit testing工作,需要select一个嘲笑的框架来使用。 我以前从来没有使用过一个模拟框架。 我们已经select了Google Test,所以使用Google Mock会很好。 不过,在看过Google Mock的教程之后,我最初的印象是: 用MOCK_METHODnmacros来重新声明模拟类中每个方法的必要性似乎是不必要的,而且似乎违背了DRY原则。 它们的匹配器(例如,EXPECT_CALL(turtle,Forward(_));;中的'_')和匹配的顺序似乎太强大了。 比如,说一些你并不擅长的事情就很容易,而且错过了这样的错误。 我对Google的开发人员有很高的信心,对我自己判断嘲笑框架的能力缺乏信心,从来没有使用过。 所以我的问题是: 这些有效的担忧? 还是有没有更好的方法来定义一个模拟对象,并在实践中直观的匹配? 我希望以前使用过Google Mock的人的答案,并且与其他C ++框架进行比较会有帮助。

在RSpec中如何说“any_instance”“should_receive”任意次数

我有一个导入控制器导入几个CSV文件到我的数据库的多个logging。 我想在RSpec中进行testing,如果使用RSpec实际保存logging: <Model>.any_instance.should_receive(:save).at_least(:once) 不过,我得到的错误说: The message 'save' was received by <model instance> but has already been received by <another model instance> 控制器的一个人为的例子: rows = CSV.parse(uploaded_file.tempfile, col_sep: "|") ActiveRecord::Base.transaction do rows.each do |row| mutation = Mutation.new row.each_with_index do |value, index| Mutation.send("#{attribute_order[index]}=", value) end mutation.save end 有没有可能使用RSpec来testing这个,或者是否有任何解决方法?

高级unit testing和模拟对象的价值

我开始相信unit testing需要广泛使用模拟对象的高层次,写得很好的代码几乎没有价值。 我想知道这个说法是正确的,还是我错过了什么? 我是什么意思,高层次? 这些是食物链顶端的类别和function。 他们的input和输出往往是用户input和用户界面。 他们的大部分工作都是通过用户input和对下级实体的一系列调用来实现的。 他们通常没有或没有有意义的回报值。 写得好是什么意思? 在这种情况下,我指的是与其依赖关系解耦的代码(使用接口和dependency injection),并且逐行处于一致的抽象级别。 没有棘手的algorithm,条件很less。 我讨厌为这种代码编写unit testing。 unit testing几乎完全由模拟对象设置组成。 一行一行,unit testing几乎就像实现的镜像一样。 实际上,我通过查看实现来编写unit testing。 “首先我声明这个模拟方法被调用,然后我声明这个模拟方法被称为…”等。 我应该testing方法的行为,而不是它调用正确的方法序列 。 另一件事:我发现这些testing对于重构来说是非常脆弱的 。 如果一个testing如此脆弱,那么当被测代码被重构时,它会完全破碎并且必须被重写,那么unit testing的主要优点之一就不会丢失了吗? 我不希望这个职位被标记为议论,或不是一个问题。 所以我会直接陈述我的问题:unit testing我所描述的代码types的正确方法是什么?或者是不是所有的东西都需要unit testing ?

在Mockito中检测到未完成的存根

运行testing时出现以下exception。 我正在使用Mockito嘲笑。 Mockito图书馆提到的提示没有帮助。 org.mockito.exceptions.misusing.UnfinishedStubbingException: Unfinished stubbing detected here: -> at com.abDomainTestFactory.myTest(DomainTestFactory.java:355) Eg 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 abDomainTestFactory.myTest(DomainTestFactory.java:276) ………. 来自DomainTestFactory的testing代码。 当我运行下面的testing时,我看到exception @Test public myTest(){ MyMainModel mainModel = Mockito.mock(MyMainModel.class); Mockito.when(mainModel.getList()).thenReturn(getSomeList()); –> Line 355 […]

Python模拟多个返回值

我正在使用pythons mock.patch并想要更改每个调用的返回值。 这里是警告:被修补的函数没有input,所以我不能根据input更改返回值。 这里是我的代码供参考。 def get_boolean_response(): response = io.prompt('y/n').lower() while response not in ('y', 'n', 'yes', 'no'): io.echo('Not a valid input. Try again']) response = io.prompt('y/n').lower() return response in ('y', 'yes') 我的testing代码: @mock.patch('io') def test_get_boolean_response(self, mock_io): #setup mock_io.prompt.return_value = ['x','y'] result = operations.get_boolean_response() #test self.assertTrue(result) self.assertEqual(mock_io.prompt.call_count, 2) io.prompt只是一个平台独立(python 2和3)版本的“input”。 所以最终我试图嘲笑用户的input。 我已经尝试使用返回值的列表,但是不缝合工作。 你可以看到,如果返回值是无效的,我会在这里得到一个无限循环。 所以我需要一种方法来最终改变返回值,以便我的testing实际完成。 (另一个可能的方法来回答这个问题可能是解释我怎么可以在unit testing中模仿用户input) […]

一个模拟/存根python模块如何能像urllib

我需要testing一个函数,需要使用urllib.urlopen(它也使用urllib.urlencode)在外部服务器上查询页面。 服务器可能closures,页面可能改变; 我不能依靠它进行testing。 控制urllib.urlopen返回的最佳方式是什么?