【发布时间】:2016-08-23 06:41:22
【问题描述】:
我最近开始为现有项目开发 TDD,遇到了几个问题,其中一个在下面提到
我有一个私有变量要在测试类中模拟,该变量如下所示
private Class<XYZ> cls = XYZ.class;
稍后这个“cls”变量被用作类名方法之一的参数
private List create(Class className, Object objectTO, List<String> names)
我知道私有变量可以被模拟和 我按照以下步骤在我的测试用例中模拟了私有变量
- 声明了
java.lang.reflect.Field; Field field = PowerMockito.field(XYZ.class,"cls");field.set(XYZ.class, "objectOfXYZClass");
当我运行我的测试类时,我遇到了错误
java.lang.IllegalArgumentException: Can not set java.lang.Class field com.tools.XYZ.cls to java.lang.Class
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:75)
at java.lang.reflect.Field.set(Field.java:680)
请有人帮我解决这个问题,让我知道我缺少什么。
PS:我使用@preparefortest 并在其中提到了所有必需的类,并使用@runwith(powermockrunner.class) 运行我的测试类
【问题讨论】:
标签: java mockito powermockito