C# 是否值得将类访问修饰符更改为public,以便从另一个程序集进行单元测试?

C# 是否值得将类访问修饰符更改为public,以便从另一个程序集进行单元测试?,c#,unit-testing,C#,Unit Testing,如果单元测试驻留在另一个程序集中,为了单元测试的目的将类访问修饰符(no或internal)更改为public是否值得?private或internal表示类封装在程序集中。如果答案是否定的,那么C#?解决这个问题的最简单方法是应用测试驱动开发(TDD),它更像是一种反馈机制,而不是一种设计方法 当使用TDD时,您首先编写测试,因此如果您的被测系统(SUT)很难测试,那么应该立即清楚。这为SUT的设计提供了一种便于测试的方式 这并不意味着允许您破坏封装。您仍然应该坚持良好的面向对象设计原则 如果

如果单元测试驻留在另一个程序集中,为了单元测试的目的将类访问修饰符(no或internal)更改为public是否值得?private或internal表示类封装在程序集中。如果答案是否定的,那么C#?

解决这个问题的最简单方法是应用测试驱动开发(TDD),它更像是一种反馈机制,而不是一种设计方法

当使用TDD时,您首先编写测试,因此如果您的被测系统(SUT)很难测试,那么应该立即清楚。这为SUT的设计提供了一种便于测试的方式

这并不意味着允许您破坏封装。您仍然应该坚持良好的面向对象设计原则


如果这样做的话,就不应该存在没有被测试覆盖的东西。您可能有内部类,但它们是通过其他公共类的公共成员间接测试的永远不要测试内部组件。如果你这样做,那就意味着它们可能已经公开了。

解决这个问题最简单的方法是应用测试驱动开发(TDD),这更像是一种反馈机制,而不是一种设计方法

当使用TDD时,您首先编写测试,因此如果您的被测系统(SUT)很难测试,那么应该立即清楚。这为SUT的设计提供了一种便于测试的方式

这并不意味着允许您破坏封装。您仍然应该坚持良好的面向对象设计原则


如果这样做的话,就不应该存在没有被测试覆盖的东西。您可能有内部类,但它们是通过其他公共类的公共成员间接测试的永远不要测试内部组件。如果你这样做,那就意味着它们可能已经公开了。

解决这个问题最简单的方法是应用测试驱动开发(TDD),这更像是一种反馈机制,而不是一种设计方法

当使用TDD时,您首先编写测试,因此如果您的被测系统(SUT)很难测试,那么应该立即清楚。这为SUT的设计提供了一种便于测试的方式

这并不意味着允许您破坏封装。您仍然应该坚持良好的面向对象设计原则


如果这样做的话,就不应该存在没有被测试覆盖的东西。您可能有内部类,但它们是通过其他公共类的公共成员间接测试的永远不要测试内部组件。如果你这样做,那就意味着它们可能已经公开了。

解决这个问题最简单的方法是应用测试驱动开发(TDD),这更像是一种反馈机制,而不是一种设计方法

当使用TDD时,您首先编写测试,因此如果您的被测系统(SUT)很难测试,那么应该立即清楚。这为SUT的设计提供了一种便于测试的方式

这并不意味着允许您破坏封装。您仍然应该坚持良好的面向对象设计原则


如果这样做的话,就不应该存在没有被测试覆盖的东西。您可能有内部类,但它们是通过其他公共类的公共成员间接测试的永远不要测试内部。如果这样做,这意味着它们可能是公共的。

不要测试私有/内部方法-测试使用私有/内部方法的任何东西。它是类访问修饰符-而不是方法。就像公共课上的Foo。在我的案例中,不测试整个班级是不可接受的。我在一个博客中发现:“有一个学派支持只有公共API需要进行单元测试。这是不正确的。我坚信所有的方法和行为都需要单元测试。”也许有一些窍门——例如C++。要测试受保护的方法,我可以从测试类继承,而不必更改测试代码。在C#中,如果测试类不是公共的,我不能从另一个程序集继承它。
[InternalsVisibleTo]
可能会帮助您。把一切公之于众是个坏主意。您应该能够通过使用公共API覆盖所有代码。如果您无法从公共API访问它,那么最好删除该代码。不要测试private/internal方法-测试使用private/internal方法的内容。它是类访问修饰符-而不是方法。就像公共课上的Foo。在我的案例中,不测试整个班级是不可接受的。我在一个博客中发现:“有一个学派支持只有公共API需要进行单元测试。这是不正确的。我坚信所有的方法和行为都需要单元测试。”也许有一些窍门——例如C++。要测试受保护的方法,我可以从测试类继承,而不必更改测试代码。在C#中,如果测试类不是公共的,我不能从另一个程序集继承它。
[InternalsVisibleTo]
可能会帮助您。把一切公之于众是个坏主意。您应该能够通过使用公共API覆盖所有代码。如果您无法从公共API访问它,那么最好删除该代码。不要测试private/internal方法-测试使用private/internal方法的内容。它是类访问修饰符-而不是方法。就像公共课上的Foo。在我的案例中,不测试整个班级是不可接受的。我在一个博客中发现:“有一个学派支持只有公共API需要进行单元测试。这是不正确的。我坚信所有的方法和行为都需要单元测试。”也许有一些窍门——例如C++。要测试受保护的方法,我可以从测试类继承,而不必更改测试代码。在C#中,我无法从测试类fro继承