I'm wondering if there is a way of setting up a mock for a dependency before the constructor of the sut is called when using a test case that sets up AutoData
.
My sut looks like:
class Sut
{
private readonly IFoo foo;
public Sut(IFooFactory factory)
{
this.foo = factory.Build(1, 2);
}
public IFoo Foo
{
get
{
return this.foo;
}
}
}
So the test that I'm writing looks like:
[Theory]
[AutoData]
internal void Foo_IsCorrectlySet_Test(
[Frozen] Mock<IFooFactory> fooFactory,
IFoo foo,
Sut sut)
{
fooFactory.Setup(mock => mock.Build(1, 2))
.Returns(foo)
.Verifiable();
var actual = sut.Foo;
Assert.Equal(foo, sut);
fooFactory.Verify();
}
Obviously this test fails as the constructor to the Sut
runs before I am able to setup the IFooFactory
. So I thought that I may have been able to change the declaration of the Sut
to Lazy<Sut>
in the test. But again the constructor is still run before the actual test code is run meaning that my test is going to fail.
Now I know that I could easily setup this test with an actual Fixture
object and create all of my objects manually and setting them up before I call to create the Sut
which is fine but I'm wanting to keep my tests all roughly the same therefore I'm wondering if there is a way that I could still setup my test with the AutoData
attribute but not run the constructor until after everything is setup?
Aucun commentaire:
Enregistrer un commentaire