我正在使用工作單元模式和我的數據層。模擬方法調用模擬對象中的屬性
public interface IUnitOfWork{
IRepository<Class1> Class1s {get;}
IRepository<Class2> Class2s {get;}
...
}
public interface IRepository<T> where T:class{
IQueryable<T> GetAll();
}
這與我的代碼庫正常工作;但是,我在我的服務層中測試此 時遇到問題。
public class SomeService{
private readonly IUnitOfWork uow;
public SomeService(IUnitOfWork u){
uow = u;
}
public IEnumerable<ViewModel1> GetViewModel(){
var result1 = uow.Class1s.GetAll();
var result2 = uow.Class2s.GetAll();
var query = from r1 in result1
from r2 in result2
where r1.key == r2.key
select new ViewModel1{...};
return result;
}
}
使用起訂量
[Test]
public void TestMethod(){
var uow = new Mock<IUnitOfWork>();
uow.Setup(u => u.Class1s.GetAll()).Returns(new []{ new Class1{...}}.AsQueryable());
uow.Setup(u => u.Class2s.GetAll()).Returns(new []{ new Class2{...}}.AsQueryable());
var service = new SomeService(uow.Object);
var result = service.GetViewModel();
Assert.AreEqual(1,result.Count());
}
測試
(測試)拋出一個異常說RESULT1(和結果2)爲空。我意識到這是因爲我沒有直接實例化屬性。但我想知道是否有辦法不必模擬模擬內的屬性。如果不是Moq,那麼也許還有其他一些嘲諷的框架?