c#:调试时为public,否则为private

use*_*667 6 c# debugging nunit access-modifiers

有没有一种很好的方法来实现它,以便在我使用NUnit进行测试时函数是公共的,但是否则是私有的?

不必生成大量无关代码也不错.

- - - - - - - - - - - - 编辑 - - - - - - - - - - - -

似乎解决方案属于3种类型:

  1. 不要做我想做的事.
  2. 使用编译器指令.
  3. 尝试一个聪明的解决方案(如使用InternalsVisibleTo).

有没有办法以编程方式执行此操作?即只需创建一个新的临时应用程序,使所有protected/private/internal功能public,插入NUnit,在那里运行测试,然后回到使用私有函数的发布版本?

Kla*_*sen 7

而不是private< - > public你可以使用internal< - > .publicInternalsVisibleTo

InternalsVisibleTo是一个程序集属性,您可以在要使单元测试程序集可见的程序集中使用该属性.您必须签署单元测试程序集,因为该InternalsVisibleTo属性依赖于调用程序集的公钥.


小智 4

如果您对调用私有方法的公共方法有很好的了解,您可能不需要这样做,但这似乎是另一场争论。

这是一个关于 TDD 及其不同方法的很好的链接: How to Test Private and Protected method in .NET