What is new?
Assert.That
MSTest v4 adds a new type of assertion, that allows you to write any expression, and it will inspect the result to give you more information on failure. Providing a very flexible way to assert complicated expressions. Here a simple example:
[TestClass]
public sealed class Test1
{
[TestMethod]
public void TestMethod1()
{
var animal = "Tiger";
var zoo = new Zoo();
Assert.That(() => zoo.GetAnimal() == animal);
}
}
public class Zoo
{
public string GetAnimal()
{
return "Giraffe";
}
}
Assert.That(() => zoo.GetAnimal() == animal) failed.
Details:
animal = "Tiger"
zoo.GetAnimal() = "Giraffe"
CallerArgumentExpression
CallerArgumentExpression is consumed by all assertions, to make them aware of the expressions used in the assertion. In the example below, we now know what both the expected and actual values are. But also what value they come from, giving us opportunity to provide better error messages:
[TestClass]
public sealed class Test1
{
[TestMethod]
public void TestMethod1()
{
string animal = null;
Assert.AreEqual("Giraffe", animal);
}
}
Error Message: Assert.AreEqual failed. Expected:<Giraffe>. Actual:<>.
'expected' expression: '"Giraffe"', 'actual' expression: 'animal'.
Breaking changes
We hidden many types that should have never been public in the first place. We believe that most of the changes won't have any real user impact. For the changes where we expect user impact migration guide from v3 is provided: https://learn.microsoft.com/dotnet/core/testing/unit-testing-mstest-migration-v3-v4
Full changelog here: v3.11.0...v4.0.0