當我需要測試一個具有很多依賴關係的類時,我使用FakeItEasy的AutoFixture,但我只是模擬其中的一些。我更喜歡使用FakeItEasy的Strict()選項嘲笑其他所有依賴項。爲了使我的測試更加乾淨,我只想嘲笑我想要的依賴關係,並能夠指定所有不模擬的依賴關係都使用Strict()創建。如何將未明確定義的依賴項註冊爲嚴格使用FakeItEasy使用AutoFixture?
在下面的例子中,我希望能夠刪除創建IDependency2模擬的兩行代碼,但保持相同的行爲:如果被測試的類訪問任何IDependency2方法,則會引發異常。
任何想法如何做到這一點?
[TestFixture]
public class AutoTests
{
[Test]
public void Test()
{
// Arrange
IFixture fixture = new Fixture().Customize(new AutoFakeItEasyCustomization());
var dependency1 = fixture.Freeze<IDependency1>();
A.CallTo(() => dependency1.DoSomething()).Returns(12);
// I do not want to specify these two lines
var dependency2 = A.Fake<IDependency2>(s=>s.Strict());
fixture.Register(() => dependency2);
// Act
var classUnderTest = fixture.Create<ClassUnderTest>();
var actualResult = classUnderTest.MethodUnderTest();
// Assert
Assert.That(actualResult,Is.GreaterThan(0));
}
}
public class ClassUnderTest
{
private readonly IDependency1 _dependency1;
private readonly IDependency2 _dependency2;
public ClassUnderTest(IDependency1 dependency1, IDependency2 dependency2)
{
_dependency1 = dependency1;
_dependency2 = dependency2;
}
public int MethodUnderTest()
{
return _dependency1.DoSomething()
+ _dependency2.DoSomething();
}
}
public interface IDependency1
{
int DoSomething();
}
public interface IDependency2
{
int DoSomething();
}
爲什麼你要測試雙打要嚴,如果你不在乎關於他們? – 2014-11-24 13:38:05
我很關心那些依賴不會被錯誤地調用。如果它們沒有被明確僞造並且被使用 - 測試應該失敗。 – 2014-11-24 14:36:50
爲什麼重要的是他們不會被錯誤地調用?這些依賴性是否有副作用? – 2014-11-24 14:50:14