問題
我們有一個使用FromServicesAttribute
填充的控制器屬性。測試使用FromServicesAttribute填充的屬性
[FromServices]
public IGenericRepository<TodoItem> TodoItemRepository { get; }
我們要使用此屬性進行測試。我們如何嘲笑它?例如,如果我們使用構造函數注入,我們可以將模擬實現傳遞給構造函數。我們如何以這種方式對待財產?
我們當前的方法
這是怎麼了,我們目前正與Moq
這樣做。
[Fact]
public void GetAll_GetsCollection()
{
// setup mock repository
var all = new List<TodoItem>()
{
new TodoItem(),
new TodoItem(),
new TodoItem()
};
var mockRepo = new Mock<IGenericRepository<TodoItem>>();
mockRepo.Setup(x => x.All()).Returns(all);
// setup mock unit of work
// including what the [FromService] property will return
var mockUnitOfWork = new Mock<IUnitOfWork>();
mockUnitOfWork
.Setup(x =>x.TodoItemRepository)
.Returns(mockRepo.Object);
// test controller
TodoController controller = new TodoController(mockUnitOfWork.Object);
var result = controller.GetAll();
Assert.Equal(3, result.Count());
}
這是行不通的,並通過測試。也許它夠好。我們是TDD的新手。
您是否使用'FromServices'而不是施工注入,因爲該服務並未被控制器上的所有操作使用?如果是的話,我更喜歡使用存儲庫作爲參數上的'FromServices'裝飾的行動... MVC特別處理'FromServices'裝飾參數...這是它有一個模型活頁夾...它作爲一個參數很明顯,一個行動取決於一個服務,使其更好的單元測試.. –