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.