正如我从 Art of unit test 中读到的那样,我知道 .NET 可以隐藏 seam 方法以在生产运行时进行测试。 (p.78~p.80)。 比如,
public class LogAnalyzer
{
...
internal LogAnalyzer (IExtensionManager extentionMgr)
{
manager = extentionMgr;
}
}
像这样跑。
using System.Runtime.CompilerServices;
[assembly:
InternalsVisibleTo("AOUT.CH3.Logan.Tests")]
因此 LogAnalyzer() 只能为测试类调用,无需担心为了可测试性而在生产代码上增加额外成本。 经过简短的调查,似乎 Java 没有等效的功能。 但是 Java 有替代品吗? 谢谢。
最佳答案
如何实现您自己的自定义 ClassLoader
?您可以定义自己的注释,如 @HideFromProductionCode
,并让您的自定义 ClassLoader
在加载具有 @HideFromProductionCode
注释的类时抛出异常。参见 How to set my custom class loader to be the default?
或者,只需将一个脚本添加到您的构建过程中,它会遍历所有已编译的生产代码并查找 @HideFromProductionCode
注释。
关于java - Java 单元测试能否像 .NET 那样隐藏生产代码的接缝接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11635962/