gpt4 book ai didi

c# - 单元测试我无法轻松创建的返回类型的选项

转载 作者:行者123 更新时间:2023-11-30 21:10:21 24 4
gpt4 key购买 nike

我需要对一个方法进行单元测试,该方法返回一个我无法轻易伪造或实例化的类型。类型实现 IQueryable<T>我最初认为我可以利用它来发挥我的优势,但我现在不知道如何。

例如:

public sealed class MyTrickyClass<T> : IQueryable<T>
{
...
}

public MyTrickyClass<T> GetData()
{
return repository.GetAllData();
}

和我的单元测试

[Test Method]
public void CanGetData()
{
var data = (new List<Record>() { new Record() }).AsQueryable();
var mockRepository = new Mock<IRepository<Record>>();
mockRepository.Setup(s => s.GetAllData()).Returns(data);

MyService service = new MyService(mockRepository.Object);
var result = service.GetData();

Assert.IsNotNull(result);

}

这不会编译,因为 GetAllData() 的返回类型是 MyTrickyClass<T> .如果我尝试投 dataMyTrickyClass<Record>类型,转换失败。

所有这些都是有道理的,但它让我想知道正确的解决方案是什么。这种情况有哪些解决方法?我也许可以更改 MyTrickyClass,但理想情况下我想找到一个解决方案,让它不受干扰。

最佳答案

你可以有 MyTrickyClass<T>实现接口(interface) ITrickyClass<T> , 它继承自 IQueryable<T> .这似乎对您的类(class)本身的侵入性微乎其微,并且您可以很好地进行 mock 。

关于c# - 单元测试我无法轻松创建的返回类型的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548538/

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