0

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

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

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

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

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

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

4

2 回答 2

2

至少对于 MSTest,Visual Studio 中的测试运行器不会检测到运行时不公开的方法。这是一个快速示例。

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

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

结果是检测到、运行并通过了一项测试。所以我认为不公开测试方法是一个主要的负面后果。

于 2019-02-08T17:46:56.613 回答
1

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

结果是它不会运行 if private

于 2019-02-08T17:47:02.957 回答