gpt4 book ai didi

c# - 方法调用的所有引用的集成测试

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:46 24 4
gpt4 key购买 nike

所以,我在 Internet 上搜索了一段时间,想看看这里是否有人已经发明了轮子。我想做的是编写一个集成测试来解析当前项目,找到对某个方法的所有引用,找到它的参数,然后检查数据库中的那个参数。例如:

public interface IContentProvider
{
ContentItem GetContentFor(string descriptor);
}

public class ContentProvider : IContentProvider
{
public virtual ContentItem GetContentFor(string descriptor)
{
// Fetches Content from Database for descriptor and returns in
}
}

任何其他类都会使用 IOC 将 IContentProvider 注入(inject)到它们的构造函数中,这样它们就可以编写如下内容:

contentProvider.GetContentFor("SomeDescriptor");
contentProvider.GetContentFor("SomeOtherDescriptor");

基本上,单元测试找到所有这些引用,找到文本集 ["SomeDescriptor", "SomeOtherDescriptor"],然后我可以检查数据库以确保我为这些描述符定义了行。此外,描述符是硬编码的。

我可以为所有描述符创建一个枚举值,但枚举将有数千个可能的选项,这看起来有点像 hack。

现在,SO 上的此链接:How I can get all reference with Reflection + C#基本上说没有一些非常高级的 IL 解析是不可能的。澄清;我不需要 Reflector 或任何东西——它只是一个我可以运行的自动化测试,这样如果我团队中的任何其他开发人员在没有创建数据库记录的情况下 checkin 调用此内容的代码,测试就会失败。

这可能吗?如果是这样,是否有人可以查看资源或修改示例代码?

编辑:或者,也许是一种不同的方法来做这个 VS 试图找到所有引用?最终结果是我希望测试在记录不存在时失败。

最佳答案

这将非常困难:您的程序可能会计算描述符的值,这意味着您的测试无需执行所述代码就能够知道哪些值是可能的。

我建议通过使用 enum type 来改变你在这里编程的方式。 ,或使用 type safe enum pattern 编码.这样,每次使用 GetContentFor 都是安全的:参数是枚举的一部分,语言类型检查器会执行检查。

然后您的测试可以轻松地迭代不同的枚举字段,并非常轻松地检查它们是否全部在您的数据库中声明。

添加新的内容 key 需要编辑枚举,但这是一个您可以忍受的小不便,因为它有助于记录确保所有调用都是安全的。

关于c# - 方法调用的所有引用的集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476167/

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