Scrubbers run on the final string before doing the verification action.
Multiple scrubbers can be defined at multiple levels.
Scrubber are executed in reveres order. So the most recent added method scrubber through to earliest added global scrubber.
Scrubbers can be added to an instance of VerifySettings
or globally on VerifierSettings
.
Allows lines to be selectively removed using a Func
.
For example remove lines containing text
:
verifySettings.ScrubLines(line => line.Contains("text"));
Remove all lines containing any of the defined strings.
For example remove lines containing text1
or text2
verifySettings.ScrubLinesContaining("text1", "text2");
Case insensitive by default (StringComparison.OrdinalIgnoreCase).
StringComparison
can be overridden:
verifySettings.ScrubLinesContaining(StringComparison.Ordinal, "text1", "text2");
Allows lines to be selectively replaced using a Func
.
For example converts lines to upper case:
verifySettings.ScrubLinesWithReplace(line => line.ToUpper());
Replaces Environment.MachineName
with TheMachineName
.
verifySettings.ScrubMachineName();
Adds a scrubber with full control over the text via a Func
using static VerifyXunit.Verifier;
[UsesVerify]
public class ScrubbersSample
{
[Fact]
public Task Lines()
{
var settings = new VerifySettings();
settings.ScrubLinesWithReplace(
replaceLine: line =>
{
if (line == "LineE")
{
return "NoMoreLineE";
}
return line;
});
settings.ScrubLines(removeLine: line => line.Contains("J"));
settings.ScrubLinesContaining("b", "D");
settings.ScrubLinesContaining(StringComparison.Ordinal, "H");
return Verify(
settings: settings,
target: @"
LineA
LineB
LineC
LineD
LineE
LineH
LineI
LineJ
");
}
[Fact]
public Task ScrubberAppliedAfterJsonSerialization()
{
var target = new ToBeScrubbed
{
RowVersion = "0x00000000000007D3"
};
var settings = new VerifySettings();
settings.AddScrubber(
input => input.Replace("0x00000000000007D3", "TheRowVersion"));
return Verify(target, settings);
}
}
using static VerifyNUnit.Verifier;
[TestFixture]
public class ScrubbersSample
{
[Test]
public Task Lines()
{
var settings = new VerifySettings();
settings.ScrubLinesWithReplace(
replaceLine: line =>
{
if (line == "LineE")
{
return "NoMoreLineE";
}
return line;
});
settings.ScrubLines(removeLine: line => line.Contains("J"));
settings.ScrubLinesContaining("b", "D");
settings.ScrubLinesContaining(StringComparison.Ordinal, "H");
return Verify(
settings: settings,
target: @"
LineA
LineB
LineC
LineD
LineE
LineH
LineI
LineJ
");
}
[Test]
public Task ScrubberAppliedAfterJsonSerialization()
{
var target = new ToBeScrubbed
{
RowVersion = "0x00000000000007D3"
};
var settings = new VerifySettings();
settings.AddScrubber(
s => s.Replace("0x00000000000007D3", "TheRowVersion"));
return Verify(target, settings);
}
}
[TestClass]
public class ScrubbersSample :
VerifyBase
{
[TestMethod]
public Task Lines()
{
var settings = new VerifySettings();
settings.ScrubLinesWithReplace(
replaceLine: line =>
{
if (line == "LineE")
{
return "NoMoreLineE";
}
return line;
});
settings.ScrubLines(removeLine: line => line.Contains("J"));
settings.ScrubLinesContaining("b", "D");
settings.ScrubLinesContaining(StringComparison.Ordinal, "H");
return Verify(
settings: settings,
target: @"
LineA
LineB
LineC
LineD
LineE
LineH
LineI
LineJ
");
}
[TestMethod]
public Task ScrubberAppliedAfterJsonSerialization()
{
var target = new ToBeScrubbed
{
RowVersion = "0x00000000000007D3"
};
var settings = new VerifySettings();
settings.AddScrubber(
input => input.Replace("0x00000000000007D3", "TheRowVersion"));
return Verify(target, settings);
}
}
LineA
LineC
NoMoreLineE
LineI
{
RowVersion: 'TheRowVersion'
}
Scrubbers can be defined at three levels:
- Method: Will run the verification in the current test method.
- Class: As a class level 'VerifySettings' field then re-used at the method level.
- Global: Will run for test methods on all tests.
Global scrubbers should be defined only once at appdomain startup. In this example the scrubber is configured using the Global Setup of XunitContext. It could also be configured using a Module Initializer.
using static VerifyXunit.Verifier;
[UsesVerify]
public class ScrubberLevelsSample
{
VerifySettings classLevelSettings;
public ScrubberLevelsSample()
{
classLevelSettings = new VerifySettings();
classLevelSettings.AddScrubber(s => s.Replace("Three", "C"));
}
[Fact]
public Task Usage()
{
var settings = new VerifySettings(classLevelSettings);
settings.AddScrubber(s => s.Replace("Two", "B"));
return Verify("One Two Three", settings);
}
static ScrubberLevelsSample()
{
// Should be dont at appdomain startup
VerifierSettings.AddScrubber(s => s.Replace("One", "A"));
}
}
using static VerifyNUnit.Verifier;
[TestFixture]
public class ScrubberLevelsSample
{
VerifySettings classLevelSettings;
public ScrubberLevelsSample()
{
classLevelSettings = new VerifySettings();
classLevelSettings.AddScrubber(s => s.Replace("Three", "C"));
}
[Test]
public Task Simple()
{
var settings = new VerifySettings(classLevelSettings);
settings.AddScrubber(s => s.Replace("Two", "B"));
return Verify("One Two Three", settings);
}
[OneTimeSetUp]
public static void Setup()
{
VerifierSettings.AddScrubber(s => s.Replace("One", "A"));
}
}
[TestClass]
public class ScrubberLevelsSample :
VerifyBase
{
VerifySettings classLevelSettings;
public ScrubberLevelsSample()
{
classLevelSettings = new VerifySettings();
classLevelSettings.AddScrubber(s => s.Replace("Three", "C"));
}
[TestMethod]
public Task Simple()
{
var settings = new VerifySettings(classLevelSettings);
settings.AddScrubber(s => s.Replace("Two", "B"));
return Verify("One Two Three", settings);
}
[AssemblyInitialize]
public static void Setup(TestContext testContext)
{
VerifierSettings.AddScrubber(s => s.Replace("One", "A"));
}
}
A B C