3. 帮助文档
商业版和免费版区别概览
MockingContainer
测试类准备:一般来说也是业务类
public class ClassUnderTest { private IFirstDependency firstDep; private ISecondDependency secondDep; public ClassUnderTest(IFirstDependency first, ISecondDependency second) { this.firstDep = first; this.secondDep = second; } public IList<object> CollectionMethod() { var firstCollection = firstDep.GetList(); return firstCollection; } public string StringMethod() { var secondString = secondDep.GetString(); return secondString; } } public interface IFirstDependency { IList<object> GetList(); } public interface ISecondDependency { string GetString(); }
单元测试
[TestMethod] public void ShouldMockDependenciesWithContainer() { // ARRANGE // Creating a MockingContainer of ClassUnderTest. // To instantiate the system uder test (the container) you should use the Instance property // For example: container.Instance. var container = new MockingContainer<ClassUnderTest>(); string expectedString = "Test"; // Arranging: When the GetString() method from the ISecondDependecy interface // is called from the container, it should return expectedString. container.Arrange<ISecondDependency>( secondDep => secondDep.GetString()).Returns(expectedString); // ACT - Calling SringMethod() from the mocked instance of ClassUnderTest var actualString = container.Instance.StringMethod(); // ASSERT Assert.AreEqual(expectedString, actualString); }
需要说明的是MockingContainer构造函数有一个可选参数AutoMockSettings,其中AutoMockSettings最主要的一个作用的是当ClassUnderTest有多个构造函数时,指定合适的构造函数来实例化对象
当业务类中有一个无参构造函数,一个有参构造函数,在没有设置AutoMockSettings的情况下会默认执行无参构造函数,
可以像下面这样来指定需要的构造函数
AutoMockSettings settings = new AutoMockSettings { ConstructorArgTypes = new Type[]{ typeof(IFirstDependency),typeof(ISecondDependency) } }; // ARRANGE // Creating a MockingContainer of ClassUnderTest. // To instantiate the system uder test (the container) you should use the Instance property // For example: container.Instance. var container = new MockingContainer<ClassUnderTest>(settings);