我正在尝试使用JUnits测试我的类,我面临的问题是代码。 有一个基类BaseMapper和TokenFraming,它是依赖类。 来自基类的getMappedValue()调用派生类中的mapStates()。 我想在TokenFraming类中设置lineTokenizer实例变量,但它没有从代码中设置。 当我调试TokenFraming时,lineTokenizer始终为Null,当我尝试访问tokenize()方法时,我得到一个空指针异常。
我尝试使用setLineTokenizer()设置lineTokenizer的值,但仍未设置。还尝试使用Reflection设置值,但这也不起作用。关于我在这里做错了什么以及如何纠正它的任何想法。任何帮助都会很棒。
Class BaseMapper {
private String fieldName;
private String fieldvalue;
// getters and setters
public static String getMappedValue(){
TokenFraming frame = new TokenFraming();
frame.mapStates(fieldName,fieldName,"validate")
}
}
Class TokenFraming {
private Tokenizer lineTokenizer = null;
public void setLineTokenizer(LineTokenizer arg) {
this.lineTokenizer = arg;
}
public String mapStates(String fieldName, String fieldName, String line) {
FieldMappedRow values = this.lineTokenizer.tokenize(line);// NullPointerException here
.......
.......
}
}
JUNit方法
@Test
public void testMethods() {
TokenFraming framing = null;
try {
//using reflection to set is not working
framing = new TokenFraming();
Class<?> c1 = framing.getClass();
Field config = c1.getDeclaredField("lineTokenizer ");
config.setAccessible(true);
config.set(framing, new DefaulltToknizer());
//setting with a setter is also not working
framing.setLineTokenizer(new DefaulltToknizer());
BaseMapper mapped = new BaseMapper();
String value = mapped.getMappedValue();
} catch (Exception e) {
message = e.getMessage();
}
Assert.assertNotSame(null, message);
}
答案 0 :(得分:0)
BaseMapper类创建一个新的TokenFraming实例 - 这与您在测试中创建的TokenFraming实例不同。
您应该将TokenFraming对象作为参数传递:
public static String getMappedValue(TokenFraming frame) {
frame.mapStates(fieldName,fieldName,"validate");
}