The following assertions are available to all types of objects.
C# |
Copy Code |
---|---|
object theObject = null; theObject.Should().BeNull("because the value is null"); theObject.Should().NotBeNull(); theObject = "whatever"; theObject.Should().BeOfType<string>("because a {0} is set", typeof(string)); theObject.Should().BeOfType(typeof(string), "because a {0} is set", typeof(string)); |
Sometimes you might like to first assert that an object is of a certain type using BeOfType
and then continue with additional assertions on the result of casting that object to the specified type. You can do that by chaining those assertions onto the Which
property like this.
C# |
Copy Code |
---|---|
someObject.Should().BeOfType<Exception>()
.Which.Message.Should().Be("Other Message"); |
To assert that two objects are equal (through their implementation of Object.Equals
), use
C# |
Copy Code |
---|---|
string otherObject = "whatever"; theObject.Should().Be(otherObject, "because they have the same values"); theObject.Should().NotBe(otherObject); |
To assert that an object is equal to one of the provided objects, you can use
C# |
Copy Code |
---|---|
theObject.Should().BeOneOf(obj1, obj2, obj3); |
To assert object equality using a custom equality comparer, you can use
C# |
Copy Code |
---|---|
theObject.Should().Be(otherObject, new ObjEqualityComparer()); theObject.Should().NotBe(otherObject, new ObjEqualityComparer()); theObject.Should().BeOneOf(new[] { obj1, obj2, obj3 }, new ObjEqualityComparer()); |
If you want to make sure two objects are not just functionally equal but refer to the exact same object in memory, use the following two methods.
C# |
Copy Code |
---|---|
theObject = otherObject; theObject.Should().BeSameAs(otherObject); theObject.Should().NotBeSameAs(otherObject); |
Other examples of some general purpose assertions include
C# |
Copy Code |
---|---|
var ex = new ArgumentException(); ex.Should().BeAssignableTo<Exception>("because it is an exception"); ex.Should().NotBeAssignableTo<DateTime>("because it is an exception"); var dummy = new Object(); dummy.Should().Match(d => (d.ToString() == "System.Object")); dummy.Should().Match<string>(d => (d == "System.Object")); dummy.Should().Match((string d) => (d == "System.Object")); |
As an alternative to using predicate matching, it is also possible to use element inspectors to do nested assertions in a fluent way.
C# |
Copy Code |
---|---|
var productDto = new ProductDto { Name = "Some product name", Price = 19.95, SKU = "ABC12345", Store = new Store { Country = "Germany", Quantity = 42 } }; productDto.Should().Satisfy<ProductDto>(dto => { dto.Name.Should().Be("Some product name"); dto.Price.Should().Be(19.95); dto.SKU.Should().EndWith("12345"); dto.Store.Should().Satisfy<Store>(store => { store.Country.Should().Be("Germany"); store.Quantity.Should().BeGreaterThan(40); }); }); |
Some users requested the ability to easily downcast an object to one of its derived classes in a fluent way.
C# |
Copy Code |
---|---|
customer.Animals.First().As<Human>().Height.Should().Be(178); |
We’ve also added the possibility to assert that an object can be serialized and deserialized using the XML or data contract formatters.
C# |
Copy Code |
---|---|
theObject.Should().BeXmlSerializable(); theObject.Should().BeDataContractSerializable(); |