使用Rhino Mocks返回空列表作为默认值

Dal*_*ala 7 c# tdd unit-testing rhino-mocks moq

我认为当一个方法没有结果来避免代码中的空检查时,总是返回空列表或数组而不是null是一个好习惯.

因为Rhino Mocks返回一个对象的默认值,对于列表和数组是null,所以很多时候我必须重新添加null检查或设置具有期望返回列表的模拟.

有没有办法用这种行为配置或扩展Rhino Mocks?

var repositoryMock = MockRepository.GenerateMock<ICustomerRepository>();
IList<Customer> customers = repositoryMock.getCustomers();

Assert.IsNotNull(customers);
Assert.AreEqual(0, customers.Count );
Run Code Online (Sandbox Code Playgroud)

Dal*_*ala 1

事实证明,只要返回的对象是 IEnumerable,Moq就可以实现这种行为。以下测试通过:

[Test]
public void EmptylListTest()
{
    var repositoryMock = new Mock<ICustomerRepository>();

    IEnumerable<Customer> customers = repositoryMock.Object.GetCustomers();

    Assert.IsNotNull(customers);
    Assert.AreEqual(0, customers.Count());
}

[Test]
public void EmptyArrayTest()
{
    var repositoryMock = new Mock<ICustomerRepository>();

    Customer[] customerArray = repositoryMock.Object.GetCustomerArray();

    Assert.IsNotNull(customerArray);
    Assert.AreEqual(0, customerArray.Length);
}

public interface ICustomerRepository
{
    IEnumerable<Customer> GetCustomers();
    Customer[] GetCustomerArray();
}
Run Code Online (Sandbox Code Playgroud)