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

发布于 2024-10-19 01:24:22 字数 388 浏览 10 评论 0原文

有没有一种好的方法可以使函数在我使用 NUnit 测试时是公共的,而在其他情况下是私有的?

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

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

它似乎解决方案分为三种类型:

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

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

Is there a nice way to make it so that functions are public when I am testing with NUnit, but private otherwise?

Not having to generate a lot of extraneous code would also be nice.

------------------------Edit------------------------

It seems the solutions fall under 3 types:

  1. don't do what I'm attempting to do.
  2. use compiler directives.
  3. try a clever solution (like using
    InternalsVisibleTo).

Might there be a way to do this programmatically? i.e. just create a new temporary app that makes all protected/private/internalfunctions public, plug that into NUnit, run the tests there, and then go back to using the private functions for the release version?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

留蓝 2024-10-26 01:24:22

您可以使用 private<->public 将它们设置为 internal<->public,而不是 private<->public a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx" rel="noreferrer">InternalsVisibleTo

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

Instead of private<->public you can make them internal<->public using InternalsVisibleTo.

InternalsVisibleTo is an assembly attribute that you can use in the assembly you want to make visible to your unit test assembly. You will have to sign your unit test assembly, because the InternalsVisibleTo attribute relies on the public key of the calling assembly.

独闯女儿国 2024-10-26 01:24:22

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

这是一个关于 TDD 及其不同方法的很好的链接:
如何在 .NET 中测试私有方法和受保护方法

You might not need to if you have good coverage on your public methods which call the private methods but that seems to be another debate into it self.

This is a good link about TDD and different ways to do it:
How to Test Private and Protected methods in .NET

我一向站在原地 2024-10-26 01:24:22

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

#define DEBUG
//...

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

There's always internal as others have pointed out, but since that's distinct from both private and public (and hence could affect other code in the same assembly), why not use compiler directives:

#define DEBUG
//...

#if DEBUG
public int PublicMethod(int x, int y)
{
    return privateMethod(x, y);
}
#endif
别低头,皇冠会掉 2024-10-26 01:24:22
private int MethodToTest() {...}

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

测试方法Tested()

private int MethodToTest() {...}

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

Test MethodTested()

蓝眼泪 2024-10-26 01:24:22

试试这个:

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

Try this:

#if DEBUG
public type MethodName(parameters)
#else
private type MethodName(parameters)
#endif
{
 // method body
}
紫瑟鸿黎 2024-10-26 01:24:22

很快,试试这个:

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

usa as myMethod();

Shortly, try this:

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

usa as myMethod();

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文