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

时间:2011-02-23 18:07:30

标签: c# debugging nunit access-modifiers

当我使用NUnit进行测试时,是否有一种很好的方法可以使函数公开,但是否则是私有的?

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

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

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

  1. 不要做我想做的事。
  2. 使用编译器指令。
  3. 尝试一个聪明的解决方案(比如使用 InternalsVisibleTo)。
  4. 有没有办法以编程方式执行此操作?即只需创建一个新的临时应用程序,使所有protected/private/internal函数public,将其插入NUnit,在那里运行测试,然后返回使用发布版本的私有函数?

6 个答案:

答案 0 :(得分:7)

您可以使用InternalsVisibleTo代替private< - > public,而不是internal< - > public

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

答案 1 :(得分:4)

如果你对公共方法有很好的报道,你可能不需要调用私有方法,但这似乎是对它的另一种辩论。

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

答案 2 :(得分:3)

总有internal正如其他人所指出的那样,但由于它与privatepublic不同(因此可能会影响同一程序集中的其他代码),为什么不使用编译器指令:

#define DEBUG
//...

#if DEBUG
public int PublicMethod(int x, int y)
{
    return privateMethod(x, y);
}
#endif

答案 3 :(得分:2)

private int MethodToTest() {...}

#if DEBUG
public int MethodTested()
{
   return MethodToTest();
}
#endif

Test MethodTested()

答案 4 :(得分:2)

试试这个:

#if DEBUG
public type MethodName(parameters)
#else
private type MethodName(parameters)
#endif
{
 // method body
}

答案 5 :(得分:2)

不久,试试这个:

#if DEBUG
public 
#else
private 
#endif
int myMethod(params)
{
   // do something.
}

usa as myMethod();