public void Test() {
// Arrange
var mock = new Mock<IActionInterface>();
var subject = new MySubject(mock.Object);
// Act
subject.DoSomething();
// Assert
mock.Verify(e => e.Store(It.IsAny<int>()), Times.Once);
}
// If one of these equality comparisons fail we just know that MyAction wasn't called with those arguments.
mock.Verify(e => e.MyAction(
It.Is<ParameterType>(param =>
param.Field1 == "some value" &&
param.Field2 == 3),
Times.Once);
// Instead:
ParameterType calledArgs = null;
mock
.Setup(e => e.MyAction(It.IsAny<ParameterType>()))
.Callback<ParameterType>(param => calledArgs = param);
Assert.That(calledArgs, Is.Not.Null);
Assert.That(calledArgs.Field1, Is.EqualTo("some value"));
Assert.That(calledArgs.Field2, Is.EqualTo(3));
private int _someVariable;
private MySubject MakeSubject()
{
var mock = new Mock<IActionInterface>();
mock.Setup(e => e.Action(It.IsAny<int>()))
.Callback<Int>(s => _someVariable= s);
return new MySubject(mock.Object);
}
private bool WasStored(int value) =>
_someVariable == value;
[Test]
public void SomeTestMethod()
{
// Arrange
var subject = MakeSubject();
// Act
subject.DoSomething();
// Assert
Assert.True(WasStored(5));
}
|
What happens when the dependency..
|
|
throws exception?
|
|
returns null?
|
|
returns wrong format? (e.g. expected json)
|
internal abstract class WebApiTests {
private WebApplicationFactory<Startup> _factory;{{nl}}
protected WebApiTests() =>
_factory = new WebApplicationFactory<Startup>();{{nl}}
protected HttpClient GetClient() =>
_factory.CreateClient();
}
class MyApiControllerTests : WebApiTests {
public async Task requestTest() {
// Arrange
var client = GetClient();{{nl}}
// Act
var response = await client.GetAsync("api/someuri");{{nl}}
// Assert
response.EnsureSuccessStatusCode();
var data = await response.Content.ReadAsAsync<Model>();{{nl}}
// Assert data ...
}
}
// Hide file access through Stream Factory
public interface IStreamFactory
{
Stream OpenStream();
void CloseStream(Stream stream);
}
// On test file
private IStreamFactory MakeStreamStorage()
{
// Create one isolated MemoryStream per test run!
_stream = new MemoryStream();
var mock = new Mock<IStreamFactory>();
mock.Setup(s => s.OpenStream()).Returns(_stream);
return mock.Object;
}
void Test() {
// slow & can fail
var data = File.ReadAllText(@"Data.json");
// slow & can fail
var x = JsonConvert.DeserializeObject<MyModel>(data);
// None of the above lines have anything to do with the test. It's all about Arrange section.
}
No comments yet.
Cheatography n. The art of mapping complex subjects into clear, instantly navigable reference guides.