0

我的程序集中有两个单独的命名空间:DataAccessDomainLogic.

我需要一个代码片段来检查没有类DomainLogic依赖于命名空间DataAccess

你会怎么做?

PS:我想我在 Mark Seemann 的.Net 中的真棒书籍 Dependency Injection 中看到了这样一个单元测试的例子,但我在这里没有它,也无法通过谷歌找到一个例子。

编辑

由于到目前为止所有的反应都指出我应该将这些相互依赖的类拆分为两个不同的程序集,我想指出这目前不是一个选择(尽管这确实是我最终的主要目标之一)。我正在处理遗留代码,我现在无法一次大爆炸地重构它。单独的命名空间和它们之间的依赖关系测试是一个中间步骤。一旦测试通过,我就可以继续将部分代码移动到不同的程序集中。

4

2 回答 2

1

程序集中的所有代码都可以在程序集的其余部分合法地访问公共代码和内部代码。因此,即使可能,这样的单元测试也是一个坏主意。

如果您将 DataAccess 类型拆分为一个单独的项目并将其全部设置为内部项目,那么将无法访问它。显然不是你想要的。但是,通过将其拆分,您可以确保 DomainAccess 可以访问 DomainLogic,但反之则不行。这大概就是你想要的。

同时,与其尝试开发单元测试来检查“DomainLogic 不得访问 DomainAccess”的规则,不如使用代码审查。假设您正在使用敏捷方法(如果没有,请这样做!),所有活动都将记录为任务。在了解并接受您的规则的人审查任务的代码更改之前,任何任务都不能被视为“完成”。违反规则,任务无法通过代码审查,必须在完成之前重新进行。

于 2013-11-01T11:32:32.187 回答
0

有一个工具可以做到这一点:根据您的规则检查命名空间依赖关系,并在构建时将违规报告为警告或错误。它被称为NsDepCop,免费、开源。

规则配置看起来像这样:

<NsDepCopConfig IsEnabled="True" CodeIssueKind="Warning">
    <Allowed From="*" To="*" />
    <Disallowed From="DomainLogic" To="DataAccess" />
</NsDepCopConfig>
于 2015-08-07T12:31:57.283 回答