我有一些Web编程方法需要编写单元测试。他们需要访问数据库,所以,我自然想要Moq这一部分。用Moq嘲讽继承类
存储类通过接口访问,实现API方法的类继承接口。我不知道的是如何模拟是单元测试中的继承接口。
public class CreateWishList : APIAccess
{
public long CreateWishListV1(long userId, string wishListName)
{
// Do stuff like
long result = Storage.CreateWishList(userId, wishListName);
return result;
}
}
public class APIAccess
{
protected IStorage Storage { get; private set; }
public APIAccess() : this(new APIStorage()) { }
public APIAccess(IStorage storage)
{
Storage = storage;
}
}
public interface IStorage
{
long CreateWishList(long userId, string wishListName);
}
所以,我想单元测试CreateWishListV1(...)
方法,要做到这一点,而不数据库访问,我需要模拟什么Storage.CreateWishList(...)
回报。我怎么做?
UPDATE:
我想是这样的:
[Test]
public void CreateWishListTest()
{
var mockAccess = new Mock<APIAccess>(MockBehavior.Strict);
mockAccess.Setup(m => m.Device.CreateWishList(It.IsAny<long>(), It.IsAny<string>())).Returns(123);
var method = new CreateWishList();
method.Storage = mockAccess.Object;
long response = method.CreateWishListV1(12345, "test");
Assert.IsTrue(response == 123, "WishList wasn't created.");
}
只好在APIAccess
改变Storage
财产公开为好。
你究竟想要测试什么?你为什么要模拟调用CreateWishListV1?我认为那是你想测试的方法? – sloth 2011-04-19 11:52:52
是的,我做错了。更新了问题;那个更好吗? – Edgar 2011-04-19 11:58:05