[TestMethod] 必须是 public 吗?如果不这样做会有什么后果?

Does a [TestMethod] have to be public? What consequences are there if it isn't?

我正在使用 Microsoft.VisualStudio.TestPlatform.TestFramework 提供的测试工具。我有一个用 [TestMethod] 装饰的测试方法。我想使用 [DataRow] 对各种参数组合实施此测试。该方法需要的参数之一是在另一个程序集中声明为内部的枚举类型;定义枚举类型的程序集使包含单元测试的程序集可以通过 InternalsVisibleTo 访问其内部。

据我所知,单元测试方法通常在 public class 中 public。当谈到这个单元测试方法时,测试方法必须不能从单元测试程序集外部访问(通过将其设为私有或内部,或者通过将包含它的测试 class 设为内部来实现)或枚举必须制作 public。制作枚举 public 是不合适的,因此将测试方法设为内部似乎是正确的。

将单元测试方法内部化是否有任何可能的负面影响?

这个问题无疑是一个简单的问题,答案也很简单。我问它是因为我在互联网上搜索答案时完全没有成功。我能找到的只是关于是否应该测试私有方法的讨论。

注意:如果您给出的评论或回答未能回答我的问题,而是建议或暗示使用 InternalsVisibleTo 测试程序集的内部成员是错误的,那么我将立即拒绝您的回答。

注2:在这种情况下可能要做的一件事是使用字符串参数而不是枚举参数,在测试方法中使用Enum.Parse,并将所有相关参数作为使用 nameof 运算符构造的字符串传递。我不喜欢这个,但这可能是最不糟糕的解决方法。

至少对于 MSTest,visual studio 中的测试 运行ner 不会检测 运行 中不属于 public 的方法。这是一个快速示例。

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1() => Assert.IsTrue(true);

    [TestMethod]
    internal void TestMethod2() => Assert.IsTrue(false);
}

结果是检测到一项测试,运行,并通过了。所以我认为没有测试方法的主要负面后果 public.

[TestMethod] 必须具有 public 访问权限。 Here微软关于此事的文档。

结果是 运行 如果 private