Tag: nunit

无法在Teamcity上启动c#+ SeleniumWebDriver + Specflow + Nunit测试

现在尝试使用Teamcity服务器运行我的Selenium测试。 服务器在本地安装。 此时团队城市中的项目包含3个步骤: NuGet instaler。 使用Visual Studio作为跑步者。 以NUnit作为跑步者。 此时,第1步和第2步成功完成。 第3步失败,日志中有下一条记录: [Step 3/3] Volvo.DigitalCommerce.AutomatedTests.dll (9m:11s) [15:02:26][Volvo.DigitalCommerce.AutomatedTests.dll] Volvo.DigitalCommerce.AutomatedTests.Features.ChildSeat.CS_BaseFlowFeature.CS_GoingThroughFullFlow on Chrome (1m:01s) [15:03:28][Step 3/3] Starting ChromeDriver 2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4) on port 6915 [15:03:28][Step 3/3] Only local connections are allowed. [15:03:28] [Volvo.DigitalCommerce.AutomatedTests.Features.ChildSeat.CS_BaseFlowFeature.CS_GoingThroughFullFlow on Chrome] [Test Error Output] -> warning: The previous ScenarioContext was already disposed. [15:03:28] [Volvo.DigitalCommerce.AutomatedTests.Features.ChildSeat.CS_BaseFlowFeature.CS_GoingThroughFullFlow on Chrome] TearDown […]

NUnit没有拿起数据库连接字符串

我有一个项目( SLR )和一个Nunit测试项目( SLR.Tests ) 与数据库交互的方法的每个测试都失败了 “对象未设置为对象的实例” 在线上的例外 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[“isvConnectionString”].ToString())) 将连接字符串硬编码到新语句中可以按预期工作,并且在运行SLR项目的过程中调用该方法不会引发任何exception。 因此看起来NUnit没有拿起配置文件 我检查了SLR的Bin文件夹。 Tests文件夹包含SLR.DLL和SLR.DLL.Config ,并且配置文件与SLR项目中的web.config文件相同。 Test项目安装了NUnit(V3.10.1)和NUit3TestAdapter(V3.10.0)。 关于这里发生了什么的任何想法?

在unit testing中处理多个模拟和断言

我目前有一个存储库,它使用Entity Framework进行我的CRUD操作。 这是注入我需要使用此repo的服务。 使用AutoMapper,我将实体Model投影到Poco模型上,并且服务返回poco。 如果我的对象有多个属性,那么设置然后断言我的属性的正确方法是什么? 如果我的服务有多个repo依赖项,那么设置我所有模拟的正确方法是什么? * – 一个类[setup],其中为这些测试装置配置了所有模拟和对象?***** 我想避免进行10次测试,每次测试在属性上有50个断言,并且每次测试都有几十个模拟设置。 这使得可维护性和可读性变得困难。 我已经阅读了unit testing艺术,并没有发现任何建议如何处理这种情况。 我使用的工具是Rhino Mocks和NUnit。 我也在SO上找到了这个,但它没有回答我的问题: 正确的unit testing服务/存储库交互 这是一个表达我所描述内容的示例: public void Save_ReturnSavedDocument() { //Simulate DB object var repoResult = new EntityModel.Document() { DocumentId = 2, Message = “TestMessage1”, Name = “Name1”, Email = “Email1”, Comment = “Comment1” }; //Create mocks of Repo Methods – Might […]

“bool”作为对象vs“string”作为对象测试相等

我对C#比较陌生,今天我注意到一些有趣的东西,我想我从来没有注意到,或者我错过了一些东西。 这是一个NUnit测试给出一个例子: object boolean1 = false; object booloan2 = false; Assert.That(boolean1 == booloan2); 这个unit testing失败,但是这个测试通过: object string1 = “string”; object string2 = “string”; Assert.That(string1 == string2); 我并不感到惊讶,第一个看不到boolean1,而boolean2是不同的引用。 但令我不安的是,第一个失败了,第二个失败了。 我读过(在某个MSDN上)对String类做了一些魔术来促进这一点。 我认为我的问题真的是为什么这个行为不是在bool中复制了? 作为注释……如果boolean1和2被声明为bool ,则没有问题。 这些差异的原因是什么或为什么以这种方式实施? 是否有一种情况,你想要引用一个bool对象除了它的值以外的任何东西?

NSubstitute检查已接来电不起作用

嘿伙计们我是NSubstitute框架的新手。 我正在尝试测试我的一些课程,但是当我使用NSubstitute检查收到的电话时,它说没有收到匹配的电话。 我正在尝试测试方法Tick()是否从track类接收update()。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ATM_System.Event; using ATM_System.EventDetection; using ATM_System.Region; using ATM_System.Track; namespace ATM_System { public class ATM { private List _tracks; private IRegion _region; private List _eventdetects; private List _events; public ATM() { _tracks = new List(); _region = new Region.Region(100000,100000); //could be changed by […]

二维对象数组返回类型 – NSubstitute

我得到一个演员exception System.InvalidCastException:无法将类型为’System.Object []’的对象强制转换为’System.Object [,]’。 在Castle.Proxies.ITestProxy.Get2DArray()在TestTest.cs中的Scratch.TestFixture.Get2DArray():第17行 从下面: [TestFixture] public class TestFixture { [Test] public void Get2DArray() { Substitute.For().Get2DArray().Returns(new object[1,1]); } } public interface ITest { object[,] Get2DArray(); } 任何人都可以对此有所了解吗? 我认为这是一个NSubstitute错误?

AppDomain.UnhandledException处理程序不会在unit testing中触发

在下面的代码片段中,为什么在unit testing中抛出exception时,附加的处理程序( AppDomain.CurrentDomain.UnhandledException事件)是否会启动? 我在VS2010上使用NUnit 2.5.10和TestDriven.NET 3.0。 [TestFixture] public class MyTests { private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine(“Gotcha!”); } [Test] public void ExceptionTest1() { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; throw new Exception(“ExceptionInTest”); } } 输出:(没有问题) —— Test started: Assembly: WcfQueue.Test.dll —— Test ‘xxxxx.Test.MyTests.ExceptionTest1’ failed: System.Exception : ExceptionInTest ProgramTests.cs(83,0): at xxxxx.Test.MyTests.ExceptionTest1() 0 passed, 1 failed, 0 skipped, […]

使用NUnit在VS2012中调试而不抛出exception?

我使用NUnit测试适配器将NUnit运行到VS2012中,我可以运行所有测试,但是如果我想在每次遇到Assert时调试所有测试它会引发exception。 如何让它不会抛出Asserts的exception? 我做错了什么吗?

如何在DI Frameworks中使用AOP和C#TestFrameworks? (不适用于被测物品)

我提前为一个可怕的标题道歉 – 建议欢迎! 我一直在读DI和AOP,我想我掌握了基础知识; 至少对于添加日志记录的规范示例。 我想将它应用于我们在NUnit中创建的测试用例,例如能够为所有测试用例方法和他们调用的任何“帮助方法”自动添加入口/出口日志记录。 (而且我没有与NUnit联系 – 如果在另一个框架中更容易,请告诉我。) 注意 – 这不是关于被测试的主题; 我想将这些技术应用于测试用例本身。 很明显如何使用PostSharp来做到这一点 – 这是他们的第一个例子。 但是,我不想将他们的许可处理添加到我们的项目中,仅用于此实验。 我发现AOP for C#的所有其他参考都是基于IoC容器实现提供的(动态)拦截器,例如CastleWindsor,Unity,Spring.Net ……在这种情况下它们都有一个共同的问题:你需要一个一段安装代码,用于为要添加拦截器的对象创建代理。 (我原本认为这段代码也必须创建一个IoC容器,但我发现我错了。) 但我无法看到这个设置代码将用于nUnit测试用例的位置。 我提出的选项,以及他们的问题: 让testfixture类构造函数为自己创建一个代理。 由于递归(消费者要求事物,事物试图将代理返回到事物,代理尝试创建事物……从阅读此StackOverflow问题 )将无法工作 滚动我自己的reflection魔术(对我来说这将是一项艰巨的任务) 让构造函数包装testfixture类中的所有方法并返回这个’wrapped’对象(不确定这是否可能构造函数执行此操作) 在testfixture上使用静态构造函数来做这个魔术(假设您可以动态地将类的方法包装到位。) 使用模块cctor(通过Einar Egilsson的InjectModuleInitializer )在模块级别执行某些操作,并使用日志记录包装所有类中的所有方法。 最简单的:用于实例化测试用例的某种工厂(非测试参数),我可以使用其中一个IoC代理生成器 对于nUnit:我能找到的唯一方法是创建自定义AddIn 。 优势 – 可能不会破坏与ReSharper的集成。 缺点 – 部署到所有开发人员机器,尤其是对NUnit的更新。 是否还有其他方法可以为nUnit执行此操作? 对于MbUnit:看起来它将测试用例视为第一类值 ,这很简单。 优点:易于部署到所有开发人员。 缺点:测试不会出现在Resharper中。 旁注: 如何处理设置和拆卸 。 我的选项和结论中是否遗漏了任何内容? 有没有更简单的方法来做到这一点,我错过了?

当违反测试超时时,NUnit会在内部做什么?

NUnit遇到超时时究竟做了什么? 我曾经认为它会通过抛出TimeoutException来中止测试,但是这个测试certificate不是这样: [Test, Timeout(100), ExpectedException(typeof(TimeoutException))] public static void RaisingExpectedTimeoutException() { Thread.Sleep(500); } 不幸的是,nunit控制台只报告违反超时的情况,但不报告测试是如何被中止的。 是否有人知道这将如何工作? 为什么上面的测试没有引起我预期的TimeoutException? (尽管它是.NETexception类型,但我认为NUnit使用Exception来处理超时违规)。 PS:这个测试方法也失败了: [Test, Timeout(100), ExpectedException(typeof(ThreadAbortException))] public static void RaisingExpectedThreadAbortException() { Thread.Sleep(500); } 并且这种测试方法成功了(“没人希望西class牙人的调查!”): [Test, ExpectedException(typeof(ThreadAbortException))] public static void ThrowingExpectedThreadAbortException() { Thread.CurrentThread.Abort(); }