当我使用NUnit进行测试时,是否有一种很好的方法可以使函数公开,但是否则是私有的?
不必生成大量无关代码也不错。
------------------------编辑---------------------- -
似乎解决方案属于3种类型:
有没有办法以编程方式执行此操作?即只需创建一个新的临时应用程序,使所有protected/private/internal
函数public
,将其插入NUnit,在那里运行测试,然后返回使用发布版本的私有函数?
答案 0 :(得分:7)
您可以使用InternalsVisibleTo
代替private
< - > public
,而不是internal
< - > public
。
InternalsVisibleTo
是一个程序集属性,您可以在要使单元测试程序集可见的程序集中使用该属性。您必须签署单元测试程序集,因为InternalsVisibleTo
属性依赖于调用程序集的公钥。
答案 1 :(得分:4)
如果你对公共方法有很好的报道,你可能不需要调用私有方法,但这似乎是对它的另一种辩论。
这是一个关于TDD的好链接以及不同的方法: How to Test Private and Protected methods in .NET
答案 2 :(得分:3)
总有internal
正如其他人所指出的那样,但由于它与private
和public
不同(因此可能会影响同一程序集中的其他代码),为什么不使用编译器指令:
#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();