简体   繁体   中英

Hide SamlMessageSignature output from gulp nunit run results

When using gulp-nunit-runner to run NUnit tests for SAMLMessageSignature message that is being signed is shown in console output. Options like noresult = true, verbose = false, trace = 'Off' have no effect. I can redirect the output to a file but I'd prefer to not do it. When using nunit3-console.exe with --trace=Off --noresult options there is no output, just Test Run Summary.

Is there a way to prevent SAMLMessage from being printed to console output without redirecting whole output to a file?

Example test:

[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();
}

For some reason samlMessage ends up in console output.

The options --result , --noresult , --trace have nothing whatsoever to do with console output but serve other purposes.

The option --verbose can be used to provide additional details for some (only some) messages generated by NUnit .

Console output can be redirected to a file using the --out option, which impacts all output sent to the console by a test. Most likely, your SAML output appears to NUnit as if it is generated by a test.

In this case, where you wish to suppress the output generated by a particular test, there are two options:

  1. Use some settings, if they exist, so that the output is never generated. I don't know if this is possible in your case.

  2. Redirect the console output for your test, capturing it yourself and then restore it at the end of the test.

If you want to do (2) then you have to remember that the console is shared by the entire process. Therefore, your test must never run in parallel with other tests. If you are running some tests in parallel, then mark that one as [NonParallelizable] .

To redirect the console, create a StringWriter and set Console.Out to it for the duration of the test. If you wish, you can examine what is written as a part of your test.

If all the tests in a particular fixture require suppressing console output, then you can do it in either a [SetUp] or a [OneTimeSetUp] method. Otherwise, do it in each individual test, possibly through a using statement.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM