3

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

4

4 回答 4

6

类是私有的或匿名的这一事实意味着实现细节是私有的。一般来说,你的测试不应该依赖于实现细节,而应该是测试行为,而不是具体的实现。

于 2012-05-29T09:38:16.090 回答
2

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

于 2012-05-29T09:36:09.140 回答
1

您不应该直接测试该私有类。

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

在第一种情况下,只需测试包含私有类的类,根本不用担心私有类。您可以将其视为实现细节。

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

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

于 2012-05-29T09:55:01.083 回答
1

我非常同意 Matthew Farwell 的说法:

一般来说,你的测试不应该依赖于实现细节,而应该是测试行为,而不是具体的实现。

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

于 2012-05-30T14:38:00.673 回答