在一个项目中定义预处理器标志并在另一个项目中使用它
Define pre-processor flag in one project and use it in another
我有一个通知服务,负责根据特定标准向各种外部客户发送电子邮件。显然,在 QA 中进行测试时,我们使用预处理器指令将所有通知路由到内部电子邮件。我有一套单元测试来验证将使用哪个电子邮件地址。我遇到的问题是我的单元测试验证条件 foo(例如)是否会向客户端 #1 发送电子邮件。但是,由于我们的预处理器标志,总是失败。
是否可以在一个项目(即单元测试项目)中设置预处理器标志并在另一个项目中使用它?这样我就可以设置一个标志(例如测试)并在我的主项目中检查它。如果设置了 TESTING 标志,则不要将通知路由到本地地址。
不,你可以为C#项目定义的符号可以在两个地方定义:
- 在项目配置中
- 在 .cs 文件本身中
第一个只会影响为其设置的项目。
此外,这些符号在编译过程中会被使用,根据您放置这些符号的位置,整段代码都会被忽略。因此,当您编译单元测试项目时,该项目引用回被测程序集,该程序集已经编译。
您将不得不为此使用不同的机制。
你考虑过依赖注入吗?向系统注入一个行为,该行为指示 where/how 消息将被路由,您可以在测试期间用模拟或存根替换它以覆盖。
正如 Lasse V. Karlsen 所说,依赖注入是 正确 处理此要求的方法。在你的代码中注入不同的行为肯定比依赖编译器标志等更好
话虽如此,如果目前无法重写应用程序以支持 DI,还有另一个选项可以让您解决此问题:
- 创建一个新的 "main application test" 项目
- 在此新项目中设置
TESTING
预处理标志
- 右键单击该项目并 select "Add existing item"。确保 select "Add as link" 然后 select 主项目中的所有文件。
您现在可以 link 您的单元测试项目到这个新项目。因为文件添加为 links,它们仍然只存在于主项目中,所以在测试版本中也会自动更改 "appear"。不过不要忘记 "Add as link" 任何新文件。
我有一个通知服务,负责根据特定标准向各种外部客户发送电子邮件。显然,在 QA 中进行测试时,我们使用预处理器指令将所有通知路由到内部电子邮件。我有一套单元测试来验证将使用哪个电子邮件地址。我遇到的问题是我的单元测试验证条件 foo(例如)是否会向客户端 #1 发送电子邮件。但是,由于我们的预处理器标志,总是失败。
是否可以在一个项目(即单元测试项目)中设置预处理器标志并在另一个项目中使用它?这样我就可以设置一个标志(例如测试)并在我的主项目中检查它。如果设置了 TESTING 标志,则不要将通知路由到本地地址。
不,你可以为C#项目定义的符号可以在两个地方定义:
- 在项目配置中
- 在 .cs 文件本身中
第一个只会影响为其设置的项目。
此外,这些符号在编译过程中会被使用,根据您放置这些符号的位置,整段代码都会被忽略。因此,当您编译单元测试项目时,该项目引用回被测程序集,该程序集已经编译。
您将不得不为此使用不同的机制。
你考虑过依赖注入吗?向系统注入一个行为,该行为指示 where/how 消息将被路由,您可以在测试期间用模拟或存根替换它以覆盖。
正如 Lasse V. Karlsen 所说,依赖注入是 正确 处理此要求的方法。在你的代码中注入不同的行为肯定比依赖编译器标志等更好
话虽如此,如果目前无法重写应用程序以支持 DI,还有另一个选项可以让您解决此问题:
- 创建一个新的 "main application test" 项目
- 在此新项目中设置
TESTING
预处理标志 - 右键单击该项目并 select "Add existing item"。确保 select "Add as link" 然后 select 主项目中的所有文件。
您现在可以 link 您的单元测试项目到这个新项目。因为文件添加为 links,它们仍然只存在于主项目中,所以在测试版本中也会自动更改 "appear"。不过不要忘记 "Add as link" 任何新文件。