In the following example I reported a simplified case of integration test where I am faking a private member and I check the arguments used on its constructor calls in two different cases.
How can I write my expectations in
FakeAMember to guarantee that test
TestConstructorWithoutParams fails if someone changes the constructor of the class
ClassUnderTest as depicted below.
That is, how can I write that the class
ClassUnderTest is going to call the constructor of the class
AMember with no parameters?
Current constructor:
internal ClassUnderTest()
{
_aMember = new AMember();
}
New constructor (
TestConstructorWithoutParams does not fail):
internal ClassUnderTest()
{
_aMember = new AMember(5);
}
Thanks in advance
-Simo
Example:
class FakeAMember
{
private readonly Mock<AMember> _mock = null;
public FakeAMember(int i)
{
_mock = MockManager.Mock<AMember>();
_mock.ExpectConstructor().Args(i);
}
public FakeAMember()
{
_mock = MockManager.Mock<AMember>();
_mock.ExpectConstructor();
}
}
class AMember
{
public AMember(int i) { }
public AMember() { }
}
class ClassUnderTest
{
private AMember _aMember;
internal ClassUnderTest()
{
_aMember = new AMember();
}
internal ClassUnderTest(int i)
{
_aMember = new AMember(i);
}
}
private ClassUnderTest _classUnderTest;
private FakeAMember _fakeAMember;
#region SetUp and TearDown
[SetUp]
public void SetUp()
{
if (!MockManager.IsInitialized)
{
MockManager.Init();
}
}
[TearDown]
public void TearDown()
{
MockManager.Verify();
}
#endregion
[Test]
public void TestConstructorWithoutParams()
{
_fakeAMember = new FakeAMember();
_classUnderTest = new ClassUnderTest();
}
[Test]
public void TestConstructorWithOneParam()
{
_fakeAMember = new FakeAMember(1);
_classUnderTest = new ClassUnderTest(1);
}