cca*_*oni 33 .net nunit unit-testing
在包含一些断言的测试中,例如:
Assert.AreEqual(1,1);
Assert.AreEqual(2,1);
Assert.AreEqual(2,2);
Run Code Online (Sandbox Code Playgroud)
是否有可能让测试在某些时候失败后继续运行?在该示例中,第一个条件为真,第二个条件失败并且测试停止.我还要评估以下条件.
Kon*_*rin 23
我更喜欢实用,并在一种方法中放入几个相关的断言.
我有一个辅助类,它启用以下语法(我使用):
AssertAll.Succeed(
() => Assert.AreEqual("bb", id.Context),
() => Assert.AreEqual("abc", id.FullName),
() => Assert.AreEqual("b", id.SessionID));
Run Code Online (Sandbox Code Playgroud)
这给了我这样的错误信息:
Assert.AreEqual failed. Expected:<bb>. Actual:<b\c>.
Assert.AreEqual failed. Expected:<abc>. Actual:<[b\c]a{103}>.
at FXP_COM.Tests.EnumToStringConverterterTests.<>c__DisplayClass3.<ShouldConvert>b__0() in UnitTest1.cs: line 31
at FXP_COM.Tests.AssertAll.Succeed(Action[] assertions) in UnitTest1.cs: line 46 at FXP_COM.Tests.AssertAll.Succeed(Action[] assertions) in UnitTest1.cs: line 62
at FXP_COM.Tests.EnumToStringConverterterTests.ShouldConvert() in UnitTest1.cs: line 30
Run Code Online (Sandbox Code Playgroud)
辅助类如下:
using System;
using NUnit.Framework;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
public static class AssertAll
{
public static void Succeed(params Action[] assertions)
{
var errors = new List<Exception>();
foreach (var assertion in assertions)
try
{
assertion();
}
catch (Exception ex)
{
errors.Add(ex);
}
if (errors.Any())
{
var ex = new AssertionException(
string.Join(Environment.NewLine, errors.Select(e => e.Message)),
errors.First());
// Use stack trace from the first exception to ensure first
// failed Assert is one click away
ReplaceStackTrace(ex, errors.First().StackTrace);
throw ex;
}
}
static void ReplaceStackTrace(Exception exception, string stackTrace)
{
var remoteStackTraceString = typeof(Exception)
.GetField("_remoteStackTraceString",
BindingFlags.Instance | BindingFlags.NonPublic);
remoteStackTraceString.SetValue(exception, stackTrace);
}
}
Run Code Online (Sandbox Code Playgroud)
use*_*610 16
NUnit 3.6添加了Assert.Multiple方法和MultipleAsserts属性.
请参阅https://github.com/nunit/docs/wiki/Multiple-Asserts.
不,你不能单独使用NUnit.你必须做像@Konstantin Spirin这样的事情.我创建了一个可以使用的小扩展; 它被称为NUnit-GroupAssert.它可以在这里找到:https://github.com/slvnperron/NUnit-GroupAssert
如何使用它:
[Test]
public void Verify_GroupsExceptions()
{
var group = new AssertGroup();
group.Add(() => Assert.AreEqual(10, 20));
group.Add(() => Assert.AreEqual(1, 1));
group.Add(() => Assert.AreEqual(3, 4));
group.Add(() => Assert.IsTrue(1 > 3));
group.Verify();
}
// OR
public void Verify_GroupsExceptions()
{
// Verifies on disposal
using (var group = new AssertGroup())
{
group.Add(() => Assert.AreEqual(10, 20));
group.Add(() => Assert.AreEqual(1, 1));
group.Add(() => Assert.AreEqual(3, 4));
group.Add(() => Assert.IsTrue(1 > 3));
}
}
Run Code Online (Sandbox Code Playgroud)
它将输出:
测试失败,因为一个或多个断言失败:
1)预期:10
但是:20
来自第18行的Verify_GroupsExceptions2)预期:3
但是:4
来自第20行的Verify_GroupsExceptions3)预期:True
但是:False
来自第21行的Verify_GroupsExceptions
| 归档时间: |
|
| 查看次数: |
17926 次 |
| 最近记录: |