Questions tagged «xunit.net»

xUnit.net是.NET Framework的单元测试工具。由NUnit的原始发明者编写的xUnit.net是用于单元测试C#,F#,VB.NET和其他.NET语言的最新技术。它与ReSharper,CodeRush和TestDriven.NET一起使用。

7
NUnit与MbUnit与MSTest与xUnit.net
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 .NET有很多单元测试框架。我发现了这个小的功能比较:http : //xunit.github.io/docs/comparisons.html 现在,我要为我们选择最佳的。但是如何?有关系吗?哪一个是最有前途的证据,并且其发展势头良好?我应该关心这些功能吗?虽然xUnit似乎是最现代的并且是专门为.NET设计的,但NUnit似乎再次被广泛接受。MSTest再次已经集成到Visual Studio中...

4
在xUnit中验证集合大小的惯用方式是什么?
我的测试套件中有一个测试是这样的: [Fact] public void VerifySomeStuff() { var stuffCollection = GetSomeStuff(); Assert.Equal(1, stuffCollection.Count()); } 该测试按我的预期工作,但是当我运行它时,xUnit会显示警告: 警告xUnit2013:请勿使用Assert.Equal()检查集合大小。 但是,警告中没有其他建议,谷歌搜索将我带到xUnit中的源代码以进行验证此警告的测试打印。 如果Assert.Equal()不是验证集合长度的正确方法,那是什么? 需要澄清的是:我意识到我可以“诱骗” xUnit,使其不发出警告,例如提取变量或使用它Assert.True(stuff.Count() == 1)。后者只是骇人听闻的,而前者的感觉就像是如果xUnit例如试图避免的多次迭代IEnumerable<T>,那么这是错误的方法(因为如果遇到问题,我将分别获得编译器的提示)和xUnit本身永远不必对输入进行多次评估(实际上,由于C#函数调用的工作原理,无论变量提取如何,它都将获得相同的输入)。 因此,我不仅对从输出中删除该警告感兴趣。我的问题的答案还解释了为什么该警告首先包含在库中,以及为什么我应该改用任何方法更好。
112 c#  xunit  xunit.net 

19
找不到testhost.dll。请发布您的测试项目,然后重试
我有一个具有单个XUnit测试方法的简单dotnet核心类库: TestLib.csproj: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.NET.Test.SDK" Version="15.9.0" /> <PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit.runner.console" Version="2.4.1"> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1"> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="xunit.runners" Version="2.0.0" /> </ItemGroup> </Project> BasicTest.cs: using Xunit; namespace TestLib { public class …

6
在xUnit.net中测试与NUnit类似的参数化
xUnit.net框架中是否有类似于NUnit的以下功能的方法? [Test, TestCaseSource("CurrencySamples")] public void Format_Currency(decimal value, string expected){} static object[][] CurrencySamples = new object[][] { new object[]{ 0m, "0,00"}, new object[]{ 0.0004m, "0,00"}, new object[]{ 5m, "5,00"}, new object[]{ 5.1m, "5,10"}, new object[]{ 5.12m, "5,12"}, new object[]{ 5.1234m, "5,12"}, new object[]{ 5.1250m, "5,13"}, // round new object[]{ 5.1299m, "5,13"}, …

4
xUnit.net:全局设置+拆卸?
这个问题是关于单元测试框架xUnit.net的。 在执行任何测试之前,我需要运行一些代码,在完成所有测试之后,还需要运行一些代码。我认为应该有某种属性或标记接口来指示全局初始化和终止代码,但找不到它们。 另外,如果我以编程方式调用xUnit,则还可以使用以下代码来实现所需的功能: static void Main() { try { MyGlobalSetup(); RunAllTests(); // What goes into this method? } finally { MyGlobalTeardown(); } } 谁能为我提供有关如何以声明方式或以编程方式运行某些全局设置/拆卸代码的提示?
98 c#  .net  xunit.net 

8
将复杂的参数传递给[理论]
Xunit具有一个不错的功能:您可以创建一个带有Theory属性的测试,然后将数据放入InlineData属性中,而xUnit将生成许多测试并将其全部测试。 我想有这样的事情,但参数我的方法不是“简单的数据”(如string,int,double),但我的类的列表: public static void WriteReportsToMemoryStream( IEnumerable<MyCustomClass> listReport, MemoryStream ms, StreamWriter writer) { ... }

11
串行执行单元测试(而不是并行执行)
我试图对我编写的WCF主机管理引擎进行单元测试。引擎基本上是根据配置动态创建ServiceHost实例。这使我们能够动态地重新配置哪些服务可用,而不必关闭所有服务并在添加新服务或删除旧服务时重新启动它们。 但是,由于ServiceHost的工作方式,在对该主机管理引擎进行单元测试时遇到了困难。如果已经为特定的端点创建,打开了一个ServiceHost,但尚未关闭它,则无法为该端点创建另一个ServiceHost,从而导致异常。由于现代单元测试平台可以并行执行其测试执行,因此我没有有效的方法来对这段代码进行单元测试。 我曾经使用过xUnit.NET,希望由于它的可扩展性,我可以找到一种方法来强制其顺序运行测试。但是,我没有任何运气。我希望有人在SO上遇到类似的问题,并且知道如何使单元测试连续运行。 注意:ServiceHost是由Microsoft编写的WCF类。我没有能力更改其行为。仅将每个服务端点托管一次也是一种正确的行为……但是,这特别不利于单元测试。

6
在ASP.NET Core中模拟IPrincipal
我有一个正在为其编写单元测试的ASP.NET MVC Core应用程序。一种操作方法使用用户名来实现某些功能: SettingsViewModel svm = _context.MySettings(User.Identity.Name); 显然在单元测试中失败了。我环顾四周,所有建议均来自.NET 4.5以模拟HttpContext。我相信有更好的方法可以做到这一点。我试图注入IPrincipal,但是抛出了错误。我什至尝试了一下(我想是出于绝望): public IActionResult Index(IPrincipal principal = null) { IPrincipal user = principal ?? User; SettingsViewModel svm = _context.MySettings(user.Identity.Name); return View(svm); } 但这也引发了错误。在文档中也找不到任何内容...

8
在xUnit.net中进行所有测试之前和之后运行一次代码
TL; DR-我正在寻找xUnit等同于MSTest AssemblyInitialize(也就是我喜欢的ONE功能)。 特别是我正在寻找它,因为我有一些Selenium烟雾测试,希望能够在没有其他依赖项的情况下运行。我有一个Fixture,它将为我启动IisExpress并销毁它。但是,在每次测试前都要这样做会极大地膨胀运行时。 我想在测试开始时触发一次此代码,然后在结束时将其处理(关闭过程)。我该怎么做呢? 即使我可以通过编程方式访问“当前正在运行多少个测试”之类的东西,我也可以弄清楚。

1
事实与理论之间的区别?-xUnit.net
我是xUnit.net和AutoFixture的新手。 我目前正在研究“ testproject”以熟悉xUnit.net和Autofixture。我不了解一件事。 [Fact]和之间有什么区别[Theory, AutoMoqData]? 您能否告诉我以下两个代码是否相等?我之所以这样问,是因为这两项考试都能成功完成,但是我想以正确的方式学习它。 [Fact] public void UpdateVersionWillUpdateCorrectlyInRepository() { var fixture = new Fixture().Customize(new AutoMoqCustomization()); var contract = fixture.Create<VersionContract>(); var version = fixture.Create<Version>(); fixture.Freeze<Mock<IContractMapper>>() .Setup(r => r.Map(contract)).Returns(version); var repMock = fixture.Freeze<Mock<VersionRepository>>(); var sut = fixture.Create<VersionManagementService>(); sut.UpdateVersion(contract); repMock.Verify(r => r.UpdateVersion(version)); } 和 [Theory, AutoMoqData] public void UpdateVersionWillUpdateCorrectlyInRepository( VersionContract contract, …

3
找不到Assert.Fail和Assert.Pass或等效项
我曾经在NUnit中使用它们,它们确实很有用。任何想法如何做这样的事情? 编辑,代码示例: bool condition = false;//would be nice not to have this observable.Subscribe(_ => { if (real test) condition= true;//Assert.Pass() }); StartObservable(); Assert.True(condition);//Assert.Fail()
72 .net  xunit.net 

14
Assert.Fail()是否被视为不良做法?
我在进行TDD时经常使用Assert.Fail。我通常一次只进行一个测试,但是当我对以后要实现的事情有想法时,我会迅速编写一个空测试,其中测试方法的名称表示要实现的待办事项列表。为了确保我不会忘记,我将Assert.Fail()放在主体中。 尝试xUnit.Net时,我发现他们尚未实现Assert.Fail。当然,您始终可以Assert.IsTrue(false),但这也无法传达我的意图。我给人的印象是Assert.Fail不是故意实现的。这被认为是不良做法吗?如果可以,为什么? @Martin Meredith这不是我所做的。我确实先编写了一个测试,然后实现代码以使其正常工作。通常我一次想到几个测试。或者,我考虑在做其他事情时要编写的测试。那是我编写一个空的失败测试要记住的时候。等我开始编写测试时,我会先做好测试工作。 @Jimmeh看起来是个好主意。被忽略的测试不会失败,但它们仍会显示在单独的列表中。必须尝试一下。 @Matt Howells好主意。在这种情况下,NotImplementedException传达的意图比assert.Fail()更好。 @米奇小麦这就是我想要的。似乎它被排除在外,以防止以我滥用它的另一种方式被滥用。

11
具有返回随机结果的函数的单元测试
我不认为这是特定于语言或框架的,但是我正在使用xUnit.net和C#。 我有一个函数,它返回一定范围内的随机日期。我输入了一个日期,返回日期始终在给定日期之前的1到40年之间。 现在,我只是想知道是否有一个很好的方法来对此进行单元测试。最好的方法似乎是创建一个循环并让函数运行100次,然后断言这100个结果中的每一个都在期望的范围内,这是我目前的方法。 我还意识到,除非能够控制我的Random生成器,否则就不会有完美的解决方案(毕竟结果是随机的),但是我想知道当您必须测试在其中返回随机结果的功能时采用什么方法?一定范围?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.