我需要检查junit是否调用了嵌套匿名类的方法。但这堂课是私人的。有没有办法在不改变工作的可见性和逻辑的情况下对其进行测试?可能存在解决类似问题的常用方法吗?
答案 0 :(得分:6)
该类是私有或匿名的事实意味着实现细节是私有的。通常,您的测试不应该依赖于实现细节,而应该测试行为,而不是特定的实现。
答案 1 :(得分:2)
唯一的方法是测试创建匿名内部类对象的方法,或者使其成为非匿名和非私有的方法。 (我已经看到相当数量的代码使其成为默认可见性并使用@VisibleForTesting
注释。)
答案 2 :(得分:1)
你不应该直接测试那个私人课程。
很可能它只是一个用作util的小类,或者它实现了一些广泛的公共接口。
在第一种情况下,只是包装私有类的测试类,并且根本不担心私有类。您可以将其视为实施细节。
在第二种情况下,只测试该类对它的公共接口。
如果我对你的代码有误,那么我的建议是稍微改变设计,将包装类移到单独的包中,将私有类提取到包级别并直接测试它。 最后一种方法是将其标记为@VisibleForTesting(来自Guava库的注释)并提高对包私有的可见性(默认)。
答案 3 :(得分:1)
我非常赞同Matthew Farwell说:
通常,您的测试不应取决于实施 细节,但应该是测试行为,而不是具体的 实施
然而,测试需要良好的设计。如果你真的觉得你应该直接测试那个类,那么这暗示该类应该是一个普通的公共类(而不是内部匿名)。