从gulp nunit运行结果中隐藏SamlMessageSignature输出

时间:2018-11-09 11:34:16

标签: c# .net gulp nunit saml-2.0

在控制台输出中显示了使用gulp-nunit-runner对正在签名的SAMLMessageSignature消息运行NUnit测试时。诸如noresult = true, verbose = false, trace = 'Off'之类的选项无效。我可以将输出重定向到文件,但我不想这样做。 将nunit3-console.exe--trace=Off --noresult选项一起使用时,没有输出,只有“测试运行摘要”。

是否有一种方法可以防止在不将整个输出重定向到文件的情况下将SAMLMessage打印到控制台输出?

示例测试:

[Test]
public void SamlMessageSignatureGenerate_SamlDocumentAndValidCert_ProducesSignedSamlMessage(
    [ValueSource(nameof(MessagesToSign))] string samlMessage,
    [ValueSource(nameof(Certs))] X509Certificate2 cert,
    [ValueSource(nameof(SupportedSignatureMethods))] string signatureMethod,
    [ValueSource(nameof(SupportedDigestMethods))] string digestMethod)
{
    XmlElement samlDoc = SamlLoader.LoadXmlFromString(samlMessage).DocumentElement;
    string inclusiveNamespacesPrefixList = null;
    SAMLMessageSignature.Generate(samlDoc, cert.PrivateKey, cert, inclusiveNamespacesPrefixList, digestMethod, signatureMethod);
    SAMLMessageSignature.IsSigned(samlDoc).Should().BeTrue();
}

由于某些原因,samlMessage最终出现在控制台输出中。

1 个答案:

答案 0 :(得分:1)

选项--result--noresult--trace与控制台输出无关,但有其他用途。

选项--verbose可用于为NUnit生成的某些消息(仅某些)提供更多详细信息。

可以使用--out选项将控制台输出重定向到文件,这会影响测试发送到控制台的所有输出。您的SAML输出很可能在NUnit中显示,就像它是由测试生成的一样。

在这种情况下,您希望抑制由特定测试生成的输出,有两种选择:

  1. 使用某些设置(如果存在),以便永远不会生成输出。我不知道您是否可以这样做。

  2. 重定向测试的控制台输出,自己捕获它,然后在测试结束时将其还原。

如果要执行(2),则必须记住控制台是整个过程共享的。因此,您的测试绝不能与其他测试并行运行。如果要并行运行某些测试,则将其标记为[NonParallelizable]

要重定向控制台,请在测试过程中创建一个StringWriter并将其设置为Console.Out。如果您愿意,可以检查在测试中编写的内容。

如果特定固定装置中的所有测试都需要抑制控制台输出,则可以使用[SetUp][OneTimeSetUp]方法进行。否则,可以在每个单独的测试中执行此操作,可能要通过using语句来完成。