gpt4 book ai didi

c# - 测试使用 FromServicesAttribute 填充的属性

转载 作者:行者123 更新时间:2023-12-01 20:05:55 24 4
gpt4 key购买 nike

问题

我们有一个使用 FromServicesAttribute 填充的 Controller 属性。

[FromServices]
public IGenericRepository<TodoItem> TodoItemRepository { get; }

我们想使用此属性进行测试。我们如何 mock 它?例如,如果我们使用构造函数注入(inject),我们可以将模拟实现传递给构造函数。我们如何以这种方式处理属性?

我们当前的方法

这就是我们目前使用 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 新手。

最佳答案

使属性可设置(如果需要,可在内部设置)并使用 InternalsVisibleTo使 setter 对测试组件可见。然后,在测试代码中构造对象后,设置属性。

或者,如果您在测试代码中使用 DI,请创建一个假 IGenericRepository<TodoItem>并让 DI 容器注入(inject)它。

关于c# - 测试使用 FromServicesAttribute 填充的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com