2

正如我从单元测试的艺术中读到的,知道 .NET 可以隐藏用于在生产运行时进行测试的接缝方法。(第 78 页~第 80 页)。如,

public class LogAnalyzer
{
...
internal LogAnalyzer (IExtensionManager extentionMgr)
{
manager = extentionMgr;
}
}

像这样跑。

using System.Runtime.CompilerServices;
[assembly:
InternalsVisibleTo("AOUT.CH3.Logan.Tests")]

所以 LogAnalyzer() 只能为测试类调用,不用担心为了可测试性而在生产代码上增加额外的成本。经过简要调查,似乎 Java 没有等效的功能。但是Java有替代品吗?谢谢。

4

2 回答 2

1

实现你自己的自定义ClassLoader怎么样?您可以定义自己的注释,如果它加载具有注释的类,则@HideFromProductionCode让您的自定义ClassLoader抛出异常@HideFromProductionCode。请参阅如何将我的自定义类加载器设置为默认值?

或者,只需在构建过程中添加一个脚本,该脚本会遍历所有已编译的生产代码并查找@HideFromProductionCode注释。

于 2012-07-24T17:25:18.680 回答
0

一种相当直接的方法是使用类似 Maven 的目录结构,为生产代码和测试代码使用单独的目录(通常在名为src/mainand的目录下src/test)。运行单元测试时,类路径包括主目录和测试目录。但是当您构建部署在生产环境中的 JAR 时,只包含在主目录中定义的类;这样,引用测试类的生产代码将导致编译错误。

于 2012-07-24T18:47:21.053 回答