如何在java中测试匿名嵌套类?

时间:2012-05-29 09:34:16

标签: java class testing junit nested

我需要检查junit是否调用了嵌套匿名类的方法。但这堂课是私人的。有没有办法在不改变工作的可见性和逻辑的情况下对其进行测试?可能存在解决类似问题的常用方法吗?

4 个答案:

答案 0 :(得分:6)

该类是私有或匿名的事实意味着实现细节是私有的。通常,您的测试不应该依赖于实现细节,而应该测试行为,而不是特定的实现。

答案 1 :(得分:2)

唯一的方法是测试创建匿名内部类对象的方法,或者使其成为非匿名和非私有的方法。 (我已经看到相当数量的代码使其成为默认可见性并使用@VisibleForTesting注释。)

答案 2 :(得分:1)

你不应该直接测试那个私人课程。

很可能它只是一个用作util的小类,或者它实现了一些广泛的公共接口。

在第一种情况下,只是包装私有类的测试类,并且根本不担心私有类。您可以将其视为实施细节。

在第二种情况下,只测试该类对它的公共接口。

如果我对你的代码有误,那么我的建议是稍微改变设计,将包装类移到单独的包中,将私有类提取到包级别并直接测试它。 最后一种方法是将其标记为@VisibleForTesting(来自Guava库的注释)并提高对包私有的可见性(默认)。

答案 3 :(得分:1)

我非常赞同Matthew Farwell说:

  

通常,您的测试不应取决于实施   细节,但应该是测试行为,而不是具体的   实施

然而,测试需要良好的设计。如果你真的觉得你应该直接测试那个类,那么这暗示该类应该是一个普通的公共类(而不是内部匿名)。