我有一个带有私有方法的类,该方法调用一些外部类并执行它,如果不使用powermock,我如何防止这种情况发生?(该项目使用Junit5,目前还不支持powermock)。
我考虑过将这些函数移到外面,但我觉得有时方法确实属于特定的类,因为它们是它的一部分,将它们移出对我来说没有意义,下面只是一个例子来说明。
我已经知道大多数人会说不要测试私有方法,但a.我不完全同意,b.我不想在这里测试这个方法,只是为了防止它执行外部调用,甚至是对假api url的调用。
public class GenericOauth2Client implements Oauth2Client {
private NetHttpTransport HTTP_TRANSPORT;
private JsonFactory JSON_FACTORY;
public GenericOauth2Client(<some_args>) {
...
HTTP_TRANSPORT = new NetHttpTransport();
JSON_FACTORY = new JacksonFactory();
}
public foo(<some_args>) {
...
fetchRefreshTokenResponse( < some_args >);
...
}
private TokenResponse fetchRefreshTokenResponse(<some_args>)
throws IOException {
return new RefreshTokenRequest(HTTP_TRANSPORT, JSON_FACTORY, new GenericUrl(tokenServerUrl),
refreshToken.tokenValue)
.setClientAuthentication(new BasicAuthentication(clientId, clientSecret))
.execute();
}
}
如何正确处理/测试?
为它创建另一个非公共的构造函数。还可以“编程到接口”,以便更轻松地注入行为
public class GenericOauth2Client implements Oauth2Client {
private HttpTransport transport;
private JsonFactory jsonFactory;
public GenericOauth2Client(<some_args>) {
...
transport = new NetHttpTransport();
jsonFactory = new JacksonFactory();
}
GenericOauth2Client(<some_args>, HttpTransport t) {
this(args);
transport = t;
}
或者,如果您无法控制http客户端,但可以更改url,那么WireMock将是模拟服务器响应的另一个选项
我的方法通常是使方法受到保护,并为测试创建一个小助手类,该类派生自被测试的类,并使用存根实现重写受保护的方法。
我不想再使用powermock了。因为junit5开始模拟静态类。因此,我试图摆脱powermock方法。 当我使用PowerMock时,我可以很容易地发现一个具有私有构造函数的类,然后我调用静态方法。 这是我代码的一部分(当我使用PowerMock时) 在我做了MessageValidationUtils.class的间谍对象后,我正在测试这个: 经过一些研究,我找不到任何与监视一个具有私有构造
我有一个问题要解决,我应该在哪里从使用Java8 streams的员工列表中找到性别为男性的第n个员工,如果没有找到,则返回可选的空。 下面是接受Employee对象列表和整数n的方法,其中n表示必须返回的第n个男性雇员(如果存在的话)。
我在项目中定义了一个模型类。和往常一样,它有一些私有变量和公共的获取者和设置者 假设在其他类中我使用这个模型,就像 然后person的私有变量保存值“my name”,我使用类的public getter访问变量,如 所以据我所知的人。getMark()返回私有变量名的引用,因此如果我修改局部变量“localMark”,它将影响Person类的私有变量,因此它会破坏变量的私有属性 前任: 我猜大多
我很好奇Jackson如何创建对象,包括没有设置器的私有属性/字段,并且只使用对象空构造函数。 我之所以问这个问题,是因为当我反序列化某些属性时,我想根据这些值自动设置其他属性。例如,我不想序列化图像,只想序列化它的路径。路径反序列化后,字段Image可以加载实际图像。构造反序列化对象后,尚未分配字段。从逻辑上讲,getter没有被调用。那么是什么巫毒魔法在触摸我的物品的私人部分呢? 但是,当杰克
我有一个私钥(ecdsa,secp256r1)。 如何在没有充气城堡的情况下从Java中制作公钥?
问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1