【问题标题】:Unit Testing in VS / Can't see the full error message for a failed testVS 中的单元测试/无法看到失败测试的完整错误消息
【发布时间】:2019-11-11 12:35:55
【问题描述】:

我目前正在为一个返回合并命令的 SQL 表达式的函数进行单元测试。 我需要查看完整的错误消息只是因为我需要查看实际函数的返回值。

相反,我只得到了一半的结果。这是错误消息;

Test Name:  deneme1
Test FullName:  'test name'
Test Source:     : line -1
Test Outcome:   Failed
Test Duration:  0:00:00

Test Name:  deneme1
Test Outcome:   Failed
Result StackTrace:  
at NUnit.Framework.Internal.Commands.TestMethodCommand.Execute(TestExecutionContext context)
   at NUnit.Framework.Internal.Execution.SimpleWorkItem.PerformWork()

Result Message: 
Expected string length 182 but was 366. Strings differ at index 12.
  Expected: "MERGE INTO [intoTable] USING [sourceTable] ON [merge_conditio..."
  But was:  "MERGE INTO [tsttargetTable] USING (SELECT [tstsourceTable].[i..."
  -----------------------^

看到结果消息被切成两半。有没有办法解决这个问题?

【问题讨论】:

    标签: c# sql visual-studio unit-testing


    【解决方案1】:

    最简单的方法是写出有问题的行,然后查看单元测试的“附加输出”。点击为此结果打开附加输出

    我假设您使用的是NUnit v3 或更高版本。在这种情况下,使用

    TestContext.WriteLine("some string");
    

    写出多余的行。其他测试框架可能支持Console.WriteLine 或它们自己的自定义机制来写入输出。

    编辑(添加示例单元测试)。

    所以,假设您有一个如下所示的单元测试:

    [Test]
    public void MyTest()
    {
        var systemUnderTest = new SystemUnderTest();
        var expected = "INSERT INTO blah blah";
        var actual = systemUnderTest.DoThingThatGetsASqlString();
        TestContext.WriteLine($"The full SQL string was: '{sqlString}'");
    
        Assert.AreEqual(expected, actual);
    }
    

    【讨论】:

    • 是的,我正在使用 NUnit v3,不确定将 TestContext.WriteLine("some string"); 放在哪里,而且我找不到任何内置机制来查找输出。因为这是一个测试,所以实际上没有输出,只有预期结果和实际结果,我看不到它们,我的意思是我知道我刚刚写的预期结果,但是不知道完整的实际结果是什么。
    • 如果这一切听起来很愚蠢,我也很抱歉,我是一名刚毕业的开发人员,正在为我的第一份真正的工作而苦苦挣扎^^@RB。
    • @PoyrazKürkçüoğlu 我添加了一个如何使用它的示例。如果您有任何其他问题,请先更新您的问题以包含您的代码 - 如果我知道您正在使用的实际代码,我可以更好地调整我的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多