Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在类声明中使用#ifdef使实现仅在调试期间可用于单元测试_C#_Unit Testing_Nunit_Moq - Fatal编程技术网

C# 在类声明中使用#ifdef使实现仅在调试期间可用于单元测试

C# 在类声明中使用#ifdef使实现仅在调试期间可用于单元测试,c#,unit-testing,nunit,moq,C#,Unit Testing,Nunit,Moq,我从单元测试开始,我想为一些已经实现的类编写测试 我们在这个项目中开发接口,我想在编写单元测试时它会有所帮助。 但是接口实现被标记为内部,到目前为止,我找到的测试实现的最佳解决方案是: #if DEBUG public class CreateRequestService : DomainServiceBase, ICreateRequestService #else internal class CreateRequestService : DomainServiceBase, ICreate

我从单元测试开始,我想为一些已经实现的类编写测试

我们在这个项目中开发接口,我想在编写单元测试时它会有所帮助。 但是接口实现被标记为内部,到目前为止,我找到的测试实现的最佳解决方案是:

#if DEBUG
public class CreateRequestService : DomainServiceBase, ICreateRequestService
#else
internal class CreateRequestService : DomainServiceBase, ICreateRequestService
#endif
{
你觉得怎么样?我试图弄清楚如何在单元测试中使用autofac,但我觉得它很有味道。这是一种好的做法吗

使现代化
我忘了指定我正在使用的工具。我用的是C#4.5,NUnit和Moq

几年前,我曾经像那样隐藏类和接口。停止这样做,只有在开发库时才会使用它

如果您使用的是.NET,则可以创建“好友程序集”。这样,单元测试程序集就可以看到生产程序集的内部成员。但为此,您需要有权访问生产程序集中的代码(您需要添加一个程序集属性)

另一种选择是简单地将类和接口公开,并将它们移动到

 MyProduct.xxx.yyy.Internal 

命名空间。通过这种方式,您可以进行测试,团队中的每个成员都知道不应该使用这些成员。

几年前,我曾经隐藏过这样的类和接口。停止这样做,只有在开发库时才会使用它

如果您使用的是.NET,则可以创建“好友程序集”。这样,单元测试程序集就可以看到生产程序集的内部成员。但为此,您需要有权访问生产程序集中的代码(您需要添加一个程序集属性)

另一种选择是简单地将类和接口公开,并将它们移动到

 MyProduct.xxx.yyy.Internal 

命名空间。通过这种方式,您可以进行测试,团队的每个成员都知道不应该使用这些成员。

您使用的是什么语言?我使用的是C#4.5、NUnit和Moq!对不起!我建议你不要做“如果调试”的事情。首先,它非常具有侵入性,在代码库中可以有很多这样的行。更重要的是:您正在测试不同的代码,然后将在生产中使用。我不是在测试不同的代码。实际上,与用于生产的代码相同,我只需要从测试中调用new Class(),并注入它的依赖项。我不熟悉单元测试,我想我做错了什么……有人可以在两年内添加#if DEBUG a++#else b++#endif。您将无法捕获该错误,因为您只能对调试代码进行单元测试。您使用的是什么语言?我使用的是C#4.5、NUnit和Moq!对不起!我建议你不要做“如果调试”的事情。首先,它非常具有侵入性,在代码库中可以有很多这样的行。更重要的是:您正在测试不同的代码,然后将在生产中使用。我不是在测试不同的代码。实际上,与用于生产的代码相同,我只需要从测试中调用new Class(),并注入它的依赖项。我不熟悉单元测试,我想我做错了什么……有人可以在两年内添加#if DEBUG a++#else b++#endif。您将无法捕获该错误,因为您只能对调试代码进行单元测试。嗨,彼塔!谢谢你的帮助!我确实将实现更改为内部(它们以前是公共的,与接口在同一个程序集中),只是为了加快IoC和DI的概念。这样,其他成员就不能从允许的范围外调用new Class()!教了我一些新东西!谢谢+嗨,彼塔!谢谢你的帮助!我确实将实现更改为内部(它们以前是公共的,与接口在同一个程序集中),只是为了加快IoC和DI的概念。这样,其他成员就不能从允许的范围外调用new Class()!教了我一些新东西!谢谢+1.