c# - C# - 我可以使用调用方法属性来确定是否允许调用具有属性的方法吗?
问题描述
我们正在使用 NUnit 进行自动化测试。我们目前正在使用 NUnit 类别属性来过滤我们的测试套件,以方便基于特定测试环境进行测试选择。
我们遇到的问题是测试维护。有时,一个新的或修改过的测试需要一个元素在测试环境中,但是所需的 Category 属性没有正确地添加到测试中。通常我们知道哪些具体方法直接依赖于具体的环境元素。我想将这些必需的元素“冒泡”到调用它们的测试方法中。我想标记——在构建时——测试调用依赖方法的方法,而没有适当的 Category 属性来指示元素的存在。警告或构建错误都可以。
这个用例感觉类似于 System.Obsolete 属性的用法。我正在考虑在需要环境元素的方法上使用属性,并标记调用依赖方法的方法。但是,我还需要考虑调用方法的 NUnit 类别属性,以确定条件是否应标记为不。
在下面的示例中,我的 finalFunc() 方法需要一个“事物”。SANDBOX_Test() 方法需要“事物”才能运行,因此从 SANDBOX_Test() 调用 finalFunc() 应该没有问题。但是,方法 SANDBOX_Test_Should_Fail_To_Compile() 没有指定“事物”的 NUnit 类别属性,因此对 finalFunc() 的调用应该为此方法提供编译器错误(或至少是警告)。
我展示了带有中间方法的代码,因为经常不直接从测试中调用有问题的方法。我希望我需要使用相同的 [Requirement("thing")] 属性标记intermediateFunc。在这种情况下,这个“次要”需求属性或 NUnit 类别属性将足以防止标记对 finalFunc 的调用。(如果可以不需要将属性放在中间方法上,那就太好了。)
是否可以使用属性来做到这一点?我应该考虑其他方法吗?
using NUnit.Framework;
using System;
namespace MyTests
{
public class RequirementAttribute : Attribute
{
public string requiredItem { get; set; }
public RequirementAttribute(string item)
{
requiredItem = item;
}
}
[TestFixture]
public class SANDBOX
{
[Test]
[Category("requires_thing")]
public void SANDBOX_Test()
{
Console.WriteLine(intermediateFunc().ToString());
}
[Test]
public void SANDBOX_Test_Should_Fail_To_Compile()
{
Console.WriteLine(intermediateFunc().ToString());
}
int intermediateFunc()
{
return finalFunc();
}
[Requirement("thing")]
int finalFunc()
{
return 9;
}
}
}
解决方案
推荐阅读
- c++ - 如何在表头之外定义模板类的模板函数?
- javascript - 为什么我的依赖下拉列表在提交后消失了?
- php - 如何处理分页数据的 RESTful API 限制
- java - 多个浏览器的TestNg非并行执行给出“org.openqa.selenium.NoSuchSessionException:无效的会话ID”
- asp.net-core - 在 F# 中获取泛型参数类型名称
- javascript - Javascript如何将两个子数组合并为一个数组
- amazon-web-services - 检索刚刚上传的文件后的 AWS s3 NoSuchKey 错误
- excel - VBA Excel获取ListObject中包含数据的总行数
- swift - SwiftUI 错误?ScrollView ,数据源,是否加载?
- python - 如何打开和读取文件夹python中的文本文件