流利的断言。近似地比较两个数字集合
我有两个阵列.是否有一种使用fluentAssertions使用.beapproxause()技术比较数元素元素的方法? 一个范围值就足以满足整个数组. 示例: double[] source = { 10.01, 8.01, 6.01 }; double[] target = { 10.0, 8.0, 6.0 }; // THE FOLLOWING IS NOT IMPLEMENTED target.Should().BeApproximately(source, 0.01); 有其他方法吗? 解决方案 通用集合主张上有一个过载,您可以在比较过程中使用任何谓词.这样,您可以做类似的事情: source.Should().Equal(target, (left, right) => AreEqualApproximately(left, right, 0.01)); 您唯一需要做的就是自己创建该方法. 其他解决方案 我知道最好比较
0 2024-04-15
编程技术问答社区
使用NUnit Console Runner来运行一个文件夹下的所有测试
我正在尝试使用Nunit Runners 2.6.4在我的测试文件夹中运行所有测试组件.我当前的命令看起来像这样: /nologo /noshadow /framework:net-4.0 /xml:.\test\TestResults.xml .\test\*.Test.dll 不幸的是,Nunit只是抛出了一个系统.ArgumentException:路径中的非法字符. 无论如何我可以做到这一点吗? 解决方案 您可以使用以下powershell命令(对于nunit3,对于nunit2更改跑步者名称): PS> nunit3-console (ls -r *\bin\Debug\*.Tests.dll | % FullName | sort-object -Unique) 命令来自先前的答案同时在单独的Nunit过程中运行每个测试程序集.此处介绍的命令在单个Nunit实例中运行所有测试组件,该实例允许发动机内置并行测试运行. 备注 记住要调
0 2024-04-15
编程技术问答社区
如何用ReSharper创建NUnit测试?
我正在尝试使用C#进行单元测试.各种各样的人告诉我要和Nunit一起去,因为它比MSTest好(显然,我不知道),而且它在我使用的Resharper方面也有很好的支持. 现在,我一生中从未写过单位测试(忍受我,我是大学生). Resharper具有这个不错的CreateUnittests上下文菜单选项,我已经看到其他人(随便看着肩膀)来取得巨大的成功.您右键单击方法,选择CreateUnittests,然后在此处创建一个测试骨架.您只需填写重要的位. 现在,当我尝试相同的过程时,Resharper希望我创建一个新的测试项目...并且当我允许它时,它会创建(我假设的)一个MSTest项目,显然是MSTST测试模板.但是我已经有一个私家项目,该项目引用了" nunit.framework",并进行了一些Nunit测试,可以使Resmanter更愿意运行.尽管如此,它仅创建了MSTST测试模板,并且仅在特殊的"测试项目"项目中创建. 我在做什么错?我是在做错什么,还是使用Re
0 2024-04-15
编程技术问答社区
NUnit 嵌套集合比较
是否有类似于collectionAssert.areequivalent()与嵌套集合一起使用的东西? 以下代码... CollectionAssert.AreEquivalent ( new Dictionary> { { 1, new Dictionary { { 10, "foo" }, { 11, "bar" }, { 12, "spam" } } }, { 2, new Dictionary { { 20, "eggs" }, { 21, "eels" } } }, { 3, new Dictionary { { 30, "hovercraft" } } } }, new Dictionary
0 2024-04-15
编程技术问答社区
有没有人在.NET中成功模拟了Socket类?
我正在尝试模拟C#中的System.net.sockets.socket类.我尝试使用Nunit Mock,但无法模拟具体类.我还尝试使用犀牛模拟,但它似乎使用了类的真实版本,因为它在send(byte [])时抛出了socketException.是否有人成功地使用了任何模拟框架创建并使用了插座模拟? 解决方案 每当我遇到MOQ的这类问题时,我最终创建了一个界面来抽象我无法模拟的东西. 因此,在您的实例中,您可能具有实现发送方法的Isocket接口.然后让您的模拟框架模拟. 在您的实际代码中,您将有这样的课程 public class MySocket : ISocket { System.Net.Sockets.Socket _socket; public void MySocket(System.Net.Sockets.Socket theSocket) { _socket = theSocket; } public vir
0 2024-04-15
编程技术问答社区
NUnit在使用Assert.AreEqual时效果不佳
我特别是单位测试,尤其是NUIT. 我只是在书中键入一些示例,其中指爪哇和朱尼特.但是我正在使用C#. 问题是:我有一个具有Overriden方法的类得到例外. Assert.True(MyClass.Equals(MyClass2))确实运作良好.但是我不想使用这种构造而不是Assert.AreEqual().问题在哪里可以? 这是类: public class Money { public int amount; protected string currency; public Money(int amount, string currency) { this.amount = amount; this.currency = currency; } public new bool Equals(object obj) { if (obj == null
0 2024-04-15
编程技术问答社区
如何将测试服务器输出记录到测试控制台
我目前正在编写一项集成测试( 我想要在API代码运行时记录的所有消息,在测试控制台输出中可见. 例如,如果此控制器方法称为: using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Serilog; namespace My.Crazy.Api.Controllers { public sealed class WheelsController : Controller { [HttpGet("getwheels")] public async Task Get() { Log.Error("An extremely urgent error"); return Ok(); }
0 2024-04-15
编程技术问答社区
对测试失败和异常情况进行截图
你们中的任何一个都知道在测试失败和异常上拍摄屏幕截图的可能解决方案吗? 我已经在TearDown()中添加了以下代码,但是结果也可以在经过的测试上制作屏幕截图,因此它不是最好的解决方案: DateTime time = DateTime.Now; string dateToday = "_date_" + time.ToString("yyyy-MM-dd") + "_time_" + time.ToString("HH-mm-ss"); Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot(); screenshot.SaveAsFile((settings.filePathForScreenShots + "Exception" + dateToday + ".png"), System.Drawing.Imaging.ImageFormat.Png); 我已经找到了这个想法:我发现的其他想法
0 2024-04-14
编程技术问答社区
我可以让代码在NUnit运行测试之前和之后执行吗?
我在Nunit中有很多测试,这些测试在文件系统上创建垃圾数据(不好,我知道,但我对此几乎没有控制).目前,我们有一个清理工具可以删除这些临时性,但是我希望能够自动运行该清理工具.所有测试完成后,我必须能够运行它.我也有类似的检查,我想在一开始要做,以确保以前的运行中没有这些临时性可能会改变测试的结果. 这是一个简单的事情,还是我必须为这样的事情实施一个全新的测试跑者? 解决方案 是, 在类上使用[SetUpFixture]属性[SetUp]和[TearDown]属性. 设置方法中的设置方法在其名称空间中包含的任何固定装置之前执行一次.所有固定装置都完成执行后,拆卸方法被执行一次.在下面的示例中,在nunit.tests namespace中的任何测试或设置方法之前,调用方法runbeforeanyTests().在命名空间中的所有测试以及其个人或固定装置的所有测试之后,将调用方法runafteranytests(). source (它在页面上说2.4,但
0 2024-04-14
编程技术问答社区
使用nunit控制台传递测试用例参数
我正在使用 nunit 和数据驱动测试方法开发测试.我有带2个参数的测试方法:XLSX文件和工作表名称的路径. 当我通过TestCase属性中的参数时,它在Visual Studio中工作非常完美,例如,当我想运行3个测试用例时,必须写下类似的内容: [TestCase(@"pathToFile.xlsx", "TestCase1")] [TestCase(@"pathToFile.xlsx", "TestCase2")] [TestCase(@"pathToFile.xlsx", "TestCase3")] public void performActionsByWorksheet(string excelFilePath, string worksheetName) { //test code } 我想使用 nunit Console 运行测试用例并传递参数(不要在代码中编写参数). 可以实现它吗? 解决方案 如果您使用的是Nunit 3,则可
0 2024-04-14
编程技术问答社区
NUnit。如何从一个非静态方法中传递TestCaseData?
我的测试因消息而失败: The sourceName specified on a TestCaseSourceAttribute must refer to a static field, property or method. 这是我的代码: const double MAX_DELTA = 0.01; Qv_ges qv_ges_NE; double Sum_Qv_ges_R_FL; Qv_ges Qv_ges_Quer; [SetUp] public void init() { qv_ges_NE = Din1946.Calc_Qv_ges_NE(205.7d); Sum_Qv_ges_R_FL = 15d + 15d + 15d + 15d + 15d + 10d + 10d + 10d + 10d + 10d + 10d + 10d; Qv_ges_Quer = Din1946.Calc_Qv_ges_Quer(qv_ges_NE,
0 2024-04-14
编程技术问答社区
为什么我们需要嘲讽框架?
我已经使用了编写Nunit测试的代码.但是,我从未与嘲笑框架合作过.这些是什么?我了解依赖注入及其如何有助于提高可测试性.我的意思是,在单元测试时可以嘲笑所有依赖关系.但是,为什么我们需要模拟框架?我们不能简单地创建模拟对象并提供依赖项.我在这里错过了什么吗? 谢谢. 解决方案 它使模拟更容易 他们通常 允许您表达可测试的 提到的断言 对象之间的相互作用. 在这里您有一个示例: var extension = MockRepository .GenerateMock>(); var ctx = new StandardContext(); ctx.AddExtension(extension); extension.AssertWasCalled( e=>e.Attach(null), o=>o.Constraints(Is.Equal(ctx))); 您
0 2024-04-14
编程技术问答社区
我可以在一个.NET应用程序中临时覆盖DNS解析吗?
我有一些包装器代码,该代码运行了一组Nunit测试,这些测试扫描了某些响应代码的实时网站. 我想针对其他服务器运行这些测试.手动运行时,我可以通过在Windows \ System32 \ drivers中编辑/etc/hosts文件来进行此操作,并临时将www.mysite.com设置为10.0.0.0.0. whate 有什么办法可以在.NET控制台应用程序中执行相同的操作 - 暂时覆盖DNS记录或以某种方式拦截分辨率并返回其他IP地址? 编辑:这是用于测试网络农场中的多个服务器.我有三台直播服务器,所有这些都认为它们是www.example.com.因为服务器使用HTTP主机标头,所以我不能仅针对server1,然后server2,server3进行测试,因为http请求 http://www.example. com/已解决到server1 ... 解决方案 过去使用C ++,我能够挂接WSOCK32.DLL的GethostByName函数和重新路由DN
0 2024-04-14
编程技术问答社区
SpecFlow和复杂对象
我正在评估 specflow 我有点卡住. 我发现的所有样品基本上都带有简单的对象. 我正在从事的项目依赖一个复杂的对象.接近样本可能是此对象: public class MyObject { public int Id { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public IList Children { get; set; } } public class ChildObject { public int Id { get; set; } public string Name { get; set; } public int Length { get; set; } } 有人知道如何写我的功能/方案,其中MyObject将从"给定的"步骤进
0 2024-04-14
编程技术问答社区
NUnit TestCaseSource
我正在使用TestCasesource属性.一个问题:当Sourcename字符串无效时,测试只是被忽略而不是失败.如果源方法重命名,Sourcename字符串不会更新,然后将失去测试提供的覆盖范围,这真的很糟糕.有没有一种方法可以改变Nunit的行为,以便如果SURCENAME无效,则测试失败了? 解决方案 这是在Nunit 2.6.2中解决的.属性有一个新的构造函数,该构建器采用Type(必须实现IEnumerable);它"建议优先使用其他形式,因为它不使用字符串来指定数据源,因此更容易被重构." (来自 documentation .) . 这确实要求您的测试跑步者支持最新的Nunit. 一个非常基本的示例(有关更多详细信息,请参见上面的文档链接): public class TestDataProvider : IEnumerable { public IEnumerator GetEnumerator() { retur
0 2024-04-14
编程技术问答社区
使用Moq来测试一个抽象类
我正在尝试在抽象类中的方法上运行单元测试.我凝结了下面的代码: 抽象类: public abstract class TestAb { public void Print() { Console.WriteLine("method has been called"); } } 测试: [Test] void Test() { var mock = new Mock(); mock.CallBase = true; var ta = mock.Object; ta.Print(); mock.Verify(m => m.Print()); } 消息: Method is not public 我在这里做错了什么?我的目标是使用MOQ框架测试抽象类中的方法. 解决方案 该消息是因为您的Test()方法不是public.测试方法需要为public.即使进行
0 2024-04-14
编程技术问答社区
带有参数的Nunit测试设置方法
我们可以有一个带有参数的测试设置方法吗? 我需要为固定装置中的每个测试设置其他设置. 我们有一些(或类似的方式)与假设的想法: [SetUp] [Argument("value-1")] [Argument("value-2")] [Argument("value-3")] public void InitializeTest(string value) { //set env var with value } 解决方案 设置每次测试一次执行一次,对于一个测试,只有一个设置和拆卸.您可以明确调用测试初始化​​方法,然后使用TestCase属性 创建数据驱动测试 public void InitializeTest(string value) { //set env var with value } [TestCase("Value-1")] [TestCase("Value-2")] [TestCase("Value-3")] public voi
0 2024-04-14
编程技术问答社区
是否有办法让SetUpFixture每个类运行一次,而不是每个命名空间运行一次?
方案 首先,我是测试的新手 - 所以请忍受我.在我的测试项目的内部,有一个控制器文件夹.控制器文件夹可能包含一个ControllerAtest.cs,ControllerBtest.cs和ControllerCtest.cs.因为我的名称空间与我的文件夹结构保持一致,所以它们都共享名称空间myproject.tests.controllers. 从我在 nunit setupfixture文档中,此名称空间将对整个命名空间运行.也就是说,如果我一次运行所有控制器测试 - 设置文件将仅执行一次. 问题 正如我所说,每个控制器测试都共享一个名称空间.设置文件适用于整个命名空间.如果我希望每个控制器拥有自己的 setupFixture怎么办?当设置适用于整个名称空间时,这是一个问题.我想要的是执行一次,而不是每次测试.我在设置装置的设置中要做的一件事是实例化控制器.当然,我可以在SetupFixture中实例化所有3个控制器,但是当我只是在测试ControlerERC时,这似乎
0 2024-04-14
编程技术问答社区
如何串行地运行NUnit测试夹具?
我有几个在C#/Nunit中实施的集成测试套件.每个测试套件都是一个单独的类,每个固定设置都会创建并从脚本中填充SQL Server数据库.所有这些都曾经在Resharper 5.1之前正常工作. 不幸的是,Resharper 5.1开始同时运行几个固定装置.这是一个打破的变化 - 他们都试图创建和填充相同的数据库,显然最终陷入了混乱.有什么办法可以使我可以串行运行测试固定装置? 如果没有,您建议什么串行我的Nunit测试固定装置,一次一次固定装置? 单个测试运行的顺序无关紧要. 解决方案 我不知道是否有可能阻止并行运行测试;如果没有,则以下黑客可能会起作用:使用静态读取Monitor成员创建一个静态类.然后,在[TestFixtureSetUp]中,在监视器上调用Enter(),然后在[TestFixtureTearDown]中的监视器上调用Exit().这样,一次只允许一个测试固定装置运行.虽然不漂亮... 其他解决方案 您确定吗?我只是尝试了一下..通过
0 2024-04-14
编程技术问答社区
在C#中单元测试HttpContext.Current.Cache或其他服务器|侧方法?
为使用if (HttpContext.Current.Cache["Some_Key"] == null) { myObject = new Object(); HttpContext.Current.Cache.Insert("Some_Key", myObject); } else { myObject = HttpContext.Current.Cache.Get("Some_Key"); } 从单元测试调用此问题时,遇到第一个Cache行时,它会失败.在Java中,我将使用仙人掌测试服务器塞代码.我可以为C#代码使用类似的工具吗? so so问题 - 这是我测试这些方法的唯一方法吗?是否有类似的工具可以运行C#? 的测试 另外,我不检查Cache是否为null,因为我不想专门为单元测试编写代码,并且假设在服务器上运行时它始终有效.这是有效的,还是我应该在缓存周围添加空检查? 解决方案 这样做的方法是避免直接使用HTTPContext或其他类似类,并用模拟代替它们
0 2024-04-14
编程技术问答社区