我目前组织单元测试的方式归结为以下几点:每个项目都有自己的单元测试专用项目。对于项目BusinessLayer,有一个BusinessLayer.UnitTests测试项目。对于我要测试的每个类,测试项目中都有一个单独的测试类,位于与被测类完全相同的文件夹结构和完全相同的命名空间中。对于来自命名空间BusinessLayer.Repositories的类CustomerRepository,在命名空间BusinessLayerUnitTests.Repositories中有一个测试类CustomerRepositoryTests>.每个测试类中的方法都遵循简单的命名约定MethodNa
我正在围绕Dictionary编写一个精简的包装器,该包装器设计为线程安全的。因此,需要一些锁,并且大部分逻辑都是围绕确保事物被正确锁定并以线程安全的方式访问。现在,我正在尝试对其进行单元测试。我想进行单元测试的一件大事是锁定行为,以确保它是正确的。但是,我从来没有在任何地方看到过这样做,所以我不确定该怎么做。另外,我知道我可以只使用一堆线程向墙上扔东西,但是对于这种类型的测试,不能保证它在出错时会失败。这取决于操作系统定义的线程调度行为。有哪些方法可以通过单元测试确保我的锁定行为是正确的? 最佳答案 锁定只是一个实现细节。您应该模
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion我喜欢将我的Assert.AreEqual扩展到许多不同的类,已知的当然是CollectionAssert,但我可以想到更多,例如:ImageAssert,XmlAssert等..您是否创建了自己的断言类?您想创造什么样的新事物?
我正在编写一个类库,其中包含常见数据结构(列表、集合、字典...)的几个专门实现。我发现自己总是一遍又一遍地编写相同的单元测试,而且我不确定我没有忘记测试一些重要的场景。由于我的类都实现了标准接口(interface)(IList、IDictionary等),我想知道是否存在这些接口(interface)的所有实现都应该通过的某种“引用”单元测试。当然,我还需要测试我的类的特定方面,但至少我会更有信心,我的标准接口(interface)实现没有任何问题。 最佳答案 你可以看看MonounittestsonGithub-那里至少有Di
我正在尝试使用托管在AzureSQL中的数据库编写测试,EffortEntityFramework6上的框架。执行以下代码时,抛出异常:[ClassInitialize]publicstaticvoidClassInitialize(TestContextcontext){EffortProviderConfiguration.RegisterProvider();}[TestMethod]publicvoidTestMethod1(){conststringconnectionString="DataSource=***;InitialCatalog=my_catalog;UserI
我发现按照AAA模式中的建议对单元测试语句进行分区的概念很有用。我倾向于添加标题注释,以便测试看起来像这样://Arrangeinta=1;intb=2;//Actintc=a+b;//AssertAssert.AreEqual(3,c);但我很好奇,总是包含这些标题注释是否正常?...或者这是我应该避免的事情?inta=1;intb=2;intc=a+b;Assert.AreEqual(3,c); 最佳答案 一旦理解了基本前提,这似乎并没有增加太多值(value)。既然你提到了C#,我建议看看TheArtofUnitTesting
我们有一个bug需要修复,就像任何优秀的TDD从业者一样,我想首先编写一个失败的测试来表示bug。该错误存在于将相当复杂的类型作为输入的方法中。只有当复杂类型设置了特定的属性值组合时,该错误才会重现。到目前为止,我已经重现了这个错误,并且在调试器中,可以查看复杂类型的运行时值。现在我需要在我的单元测试的“安排”部分中创建该复杂类型,以便我可以将它提供给单元测试的“Act”部分中的错误方法。我可以手动编写一个大对象初始化程序代码块,例如以下代码:varcats=newList{newCat{Name="Sylvester",Age=8},newCat{Name="Whiskers",Ag
我正在尝试使用Moq测试调用具有“params”列表的方法,但由于某种原因,这失败了。方法签名是这样的:voidAttachAsModifiedToOrders(IOrderorder,paramsExpression>[]modifiedProperties);然后在Mock设置中我做了类似这样的事情来从模拟集合中做一个简单的“删除/插入”:MockEntities.Setup(n=>n.AttachAsModifiedToOrders(It.IsAny())).Callback>[]>((order,expr)=>{Orders.Remove(Orders.Where(o=>o.I
在其中一个Action中,我做了这样的事情publicHttpResponseMessagePost([FromBody]Foofoo){..........varresponse=Request.CreateResponse(HttpStatusCode.Accepted,new{Token="SOME_STRING_TOKEN"});returnresponse;}还有更多类似的方法返回一个匿名类型实例,并且效果很好。现在,我正在为它编写测试。我有HttpResponseMessageresponse=_myController.Post(dummyFoo);HttpRespons
我想比较一个对象列表,忽略列表中对象的顺序,只比较对象中的一些属性,目前我正在使用以下代码来执行此比较:actual.Should().NotBeNull();actual.Count.Should().Be(expected.Count);//compareignoringorderforeach(varexpinexpected)actual.Should().Contain(act=>act.IndividualId.Equals(exp.IndividualId)&&act.Email.Equals(exp.Email)&&act.FirstName.Equals(exp.Fi