Tag: 嘲讽

嘲笑一个函数来引发Exception来testing一个except块

我有一个函数( foo )调用另一个函数( bar )。 如果调用bar()会引发一个HttpError ,如果状态码是404,我想特别处理,否则重新提升。 我试图围绕这个foo函数写一些unit testing,嘲笑bar()的调用。 不幸的是,我无法得到bar()的模拟电话来提出一个exception,这个exception被我的except块拦截。 这是我的代码,说明了我的问题: import unittest import mock from apiclient.errors import HttpError class FooTests(unittest.TestCase): @mock.patch('my_tests.bar') def test_foo_shouldReturnResultOfBar_whenBarSucceeds(self, barMock): barMock.return_value = True result = foo() self.assertTrue(result) # passes @mock.patch('my_tests.bar') def test_foo_shouldReturnNone_whenBarRaiseHttpError404(self, barMock): barMock.side_effect = HttpError(mock.Mock(return_value={'status': 404}), 'not found') result = foo() self.assertIsNone(result) # fails, test raises HttpError @mock.patch('my_tests.bar') def […]

如何为moq中的属性赋值?

我有一个类的方法,返回一个Usertypes的对象 public class CustomMembershipProvider : MembershipProvider { public virtual User GetUser(string username, string password, string email, bool isApproved) { return new User() { Name = username ,Password = EncodePassword(password) ,Email = email ,Status = (isApproved ? UsuarioStatusEnum.Ativo : UsuarioStatusEnum.ConfirmacaoPendente) // … }; } // .. } User是一个域对象。 注意setter的Id属性为protected : public class User : IAuditable, IUser […]

rspec中的double方法是什么?

在rspec doc中说,我应该使用double方法来创buildtestingdouble。 但是我可以看到,即使我不使用double ,它也能正常工作。 不使用double有什么问题吗? 另外,如果我不使用双如何MyClass获取stub和其他rspec方法? 它们在rspec中运行时是否可用于所有对象? require 'spec_helper' class MyClass def self.run new.execute end def execute 'foo' end end describe MyClass do it 'should stub instance method' do obj = MyClass.new obj.stub(:execute).and_return('bar') obj.execute.should == 'bar' end it 'should stub class method' do MyClass.stub(:run).and_return('baz') MyClass.run.should == 'baz' end end

Moq:unit testing一个依赖于HttpContext的方法

考虑.NET程序集中的一个方法: public static string GetSecurityContextUserName() { //extract the username from request string sUser = HttpContext.Current.User.Identity.Name; //everything after the domain sUser = sUser.Substring(sUser.IndexOf("\\") + 1).ToLower(); return sUser; } 我想从使用Moq框架的unit testing中调用这个方法。 这个程序集是webforms解决scheme的一部分。 unit testing看起来像这样,但我缺lessMoq代码。 //arrange string ADAccount = "BUGSBUNNY"; string fullADName = "LOONEYTUNES\BUGSBUNNY"; //act //need to mock up the HttpContext here somehow — using Moq. string foundUserName […]

PHPUnit模拟对象和静态方法

我正在寻找最好的方法去testing下面的静态方法(特别是使用Doctrine模型): class Model_User extends Doctrine_Record { public static function create($userData) { $newUser = new self(); $newUser->fromArray($userData); $newUser->save(); } } 理想情况下,我会使用一个模拟对象来确保“fromArray”(使用提供的用户数据)和“save”被调用,但这是不可能的,因为方法是静态的。 有什么build议么?

需要帮助来更好地理解Moq

我一直在看Moq的文档,这些评论太短,我不能理解它可以做的每一件事情。 我没有得到的第一件事是It.IsAny<string>(). //example using string It.IsAny<string>(). //example using string 使用它只是为了增加一些价值吗? 如果你不关心价值,我知道人们会说这个,但是如果你不关心价值,那么你可以做“一”或什么东西? 这只是更多的打字。 其次,什么时候会是一个你不关心价值的例子? 我认为Moq需要价值来匹配东西。 我没有得到它。它是完全或如何使用它。 我不明白这个例子,它试图展示什么。 接下来,我不明白什么时候使用Times (及其AtMost方法和类似的)。 为什么要限制设置的次数? 我有一些AppConfig值,我需要使用两次。 为什么我想限制一次呢? 这只会使testing失败。 这是否阻止其他人添加另一个到您的代码或东西? 我没有得到如何使用mock.SetupAllProperties(); 它与什么build立属性? 我也不明白为什么有很多不同的方式来build立一个属性,以及它们有什么不同。 该文件有: SetupGet(of property) SetupGet<TProperty> 我注意到Moq中有很多东西显示()和<> – 它们之间有什么区别,它们看起来像在使用什么? 我也不明白为什么他们有SetupGet 。 你会不会使用SetupSet来设置属性? SetupSet有五种不同的方式在文档中使用它。 另外一个叫做SetupProperty 。 所以我不明白为什么有这么多。 在一个侧面说明,我想知道在lambda使用的variables是否独立于其他lambda。 例如: mock.setup(m => m.Test); stop.setup(m => m.Test); 这会好吗或者variablesm之间会有一些冲突吗? 最后,我正在看这个video ,我想知道它是否显示Visual Studio。 他的Intellisense看起来不一样。 一个灯泡popup了他(我很高兴我不这样做,因为它带回了netbeans痛苦的回忆),并且有从一个开放的支撑线到右支撑等行。 谢谢 […]

多个Moq It.Is <string>()匹配的参数

用Moq,是否有多个匹配参数? It.Is<string>() 在这个例子中,我希望mockMembershipService根据提供的用户返回不同的ProviderUserKey。 mockMembershipService.Setup( x => x.GetUser( It.Is<string>( s => s.Contains("Joe"))) .ProviderUserKey) .Returns("1234abcd"); mockMembershipService.Setup( x => x.GetUser( It.Is<string>( s => s.Contains("Tracy"))) .ProviderUserKey) .Returns("5678efgh"); SetUp默认为第二条语句,而不是根据自身的优点来评估每条语句。

在Moq Callback()调用中设置variables值

我想我可能对Moqcallback方法的语法有些困惑。 当我尝试做这样的事情: IFilter filter = new Filter(); List<IFoo> objects = new List<IFoo> { new Foo(), new Foo() }; IQueryable myFilteredFoos = null; mockObject.Setup(m => m.GetByFilter(It.IsAny<IFilter>())) .Callback( (IFilter filter) => myFilteredFoos = filter.FilterCollection(objects)) .Returns(myFilteredFoos.Cast<IFooBar>()); 这将抛出exception,因为在调用Cast<IFooBar>()期间myFilteredFoos为null。 这是不是像我所期望的那样工作? 我会认为FilterCollection将被调用,然后myFilteredFoos将是非空的,并允许投。 FilterCollection不能够返回一个null,这引出了我没有被调用的结论。 另外,当我声明myFilteredFoos是这样的: Queryable myFilteredFoos; 返callback用声明myFilteredFoos可能在初始化之前使用。

假货比Mocks好吗?

我偶然发现了这个开源项目Fake It Easy ,我不得不承认,这看起来非常有趣,但是我怀疑,FIE假货和Moq Mocks之间有什么区别? 有什么更好的特殊用途? 编辑: 这个新的框架是什么使它比Moq更好呢?

嘲笑静态方法

最近,我开始使用Moq进行unit testing。 我使用Moq来嘲笑那些我不需要testing的类。 你通常如何处理静态方法? public void foo(string filePath) { File f = StaticClass.GetFile(filePath); } 这个静态方法, StaticClass.GetFile()被嘲弄? PS我会很感激您在Moq和unit testing中推荐的任何阅读材料。