2 回答

TA贡献1784条经验 获得超7个赞
可以使用 Powermock 执行此操作,如下所述:如何使用 Mockito 模拟 System.getProperty
但是,更好的方法是创建一个包装类,System
然后将包装器注入到您要测试的类中。
然后在您的单元测试中,您可以注入包装器的测试实现并控制系统的输出。

TA贡献1813条经验 获得超2个赞
我将介绍一个测试接缝:
@Override public String toString() {
return toString(System.identityHashCode(object));
}
/** Visible for testing. */
String toString(int hashCode) {
// Your implementation here.
}
这样,您可以toString(int)从相邻的测试中调用任意多次,而无需担心 PowerMock 甚至 Mockito。
作为替代方案,如果 System.identityHashCode 在您的类中的其他地方使用,因此结果需要保持一致,您可以在构造函数中使用替换ToIntFunction,并让默认实现传递System.identityHashCode作为对静态方法的引用。
public YourWrapperClass(Object object) {
this(object, System::identityHashCode);
}
/** Visible for testing. */
YourWrapperClass(Object object, ToIntFunction<Object> hashCodeFunction) {
this.object = object;
this.hashCodeFunction = hashCodeFunction;
}
添加回答
举报