jeudi 24 mars 2016

Unit Testing with modifying static variables during initialization

I have a class that has static variables assigned during initialization. I would like to write unit tests for this class with modifying values for this static variable. Below is a simple code to explain my scenario

Class to test:

public class Hello {
private final static String HELLO_FINAL = "Hello " + HelloTo.getInstance().getHelloTo(); // I would like to modify this value between tests

  public String sayHello() {
    return HELLO_FINAL;
  }
}

Supporting class:

public class HelloTo {
  private String helloTo = "World";
  private static HelloTo singleton = new HelloTo(); 
  private HelloTo() {}  
  public static HelloTo getInstance() {
    return singleton;
  }
  public void setHelloTo(String helloTo) {
    this.helloTo = helloTo;
  }
  public String getHelloTo() {
    return helloTo;
  }
}

Test class:

import org.junit.Assert;
import org.junit.Test;
public class HelloTest {
  @Test
  public void testDefault() {
    Assert.assertEquals("Hello World", new Hello().sayHello());
  }
  @Test
  public void testDynamic() {
    HelloTo.getInstance().setHelloTo("My name");
    Assert.assertEquals("Hello My name", new Hello().sayHello());
  }
}

Is there a way to make both tests successful. Currently I get a failure for testDymanic() saying:

org.junit.ComparisonFailure: expected:<Hello [World]> but was:<Hello [My name]>

Thanks in advance!

Aucun commentaire:

Enregistrer un commentaire