在使用JUnit进行测试时,无法在Java中设置类的实例变量的值

时间:2014-05-09 10:05:31

标签: java junit

我正在尝试使用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);
}

1 个答案:

答案 0 :(得分:0)

BaseMapper类创建一个新的TokenFraming实例 - 这与您在测试中创建的TokenFraming实例不同。

您应该将TokenFraming对象作为参数传递:

 public static String getMappedValue(TokenFraming frame) {
     frame.mapStates(fieldName,fieldName,"validate");
 }