2011-02-03 5 views
0

안녕하세요 모두 클래스 생성자에서 설정 한 클래스 필드의 특정 값에 대해 각각 다른 시간대에 실행하려는 소프트웨어가 있습니다.
예컨대 어딘가에 코드에서Java 클래스 필드 주입

public class Stuff 
{ 
    private double importantVal; 
    public Stuff(double val) 
    { 
     this.importantval = val; 
    } 
    public double doStuff() 
    { 
     return 4 * importantVal; 
    } 
} 

이 클래스의 라인을 따라 뭔가 및 방법은 아주 멀리 아래 프로그램/콜 스택, 그래서 나는 단지 그 자체로 doStuff을 여러 번 호출 할 수 없습니다.
importantVal의 다양한 값에 대해 프로그램을 테스트하고 싶습니다. 아마도 파일에 배치하고 반복하는 것입니다. 여러 번 프로그램을 실행하는 쉬운 일을했지만, importantVal의 다른 값을 대체하는 방법에 대한 좋은 아이디어가 없습니다. 다른 모든 것들이 실패 할 경우 항상 소스 코드를 수정하는 스크립트를 작성할 수는 있지만 추악하고 임시적인 것으로 느껴집니다. 주입과 관련된 더 우아한 해결책이 있습니까?

+0

현재 프로그램을 어떻게 실행합니까? 명령 줄에서 실행합니까 아니면 웹 응용 프로그램 또는 웹 서비스입니까? – CoolBeans

+1

많은 사람들이 귀하의 질문을 이해할 지 확신하지 못합니다. 왜 junit 테스트 케이스를 작성하고 새로운 Stuff (double) .doStuff()를 반복적으로 호출 할 수 없습니까? 내가 놓친 게 있니? –

+0

유닛 테스팅을 살펴보고 싶을 것 같습니다. http://en.wikipedia.org/wiki/Unit_testing 특히 JUnit 또는 TestNG 또는 다른 테스팅 프레임 워크 – jluzwick

답변

0
public class StuffRunner { 
    public static void main(String[] args) { 
     double x = 0.0d; 

     for (int i = 0; i < 100; ++i) { 
      Stuff s = new Stuff(x); 

      if (s.doStuff() != 4 * x) { 
       System.out.print("Error, unexpected value. X="); 
       System.out.println(x); 
      } 

      x = x + 1.22; 
     } 
    } 
} 
3

여기의 사람들이 당신을 말하려고하는 것을 설명하기는을 testcases처럼 보일 수 있습니다 방법은 다음과 같습니다 -

public class StuffTest { 

    @Test 
    public void testDoStuff_Zero(){ 
     Stuff stuff = new Stuff(0); 
     assertEquals(0, stuff.doStuff()); 
    } 

    @Test 
    public void testDoStuff_One(){ 
     Stuff stuff = new Stuff(1); 
     assertEquals(4, stuff.doStuff()); 
    } 

    @Test 
    public void testDoStuff_NegativeValue(){ 
     Stuff stuff = new Stuff(-10); 
     assertEquals(-40, stuff.doStuff()); 
    } 

    @Test 
    public void testDoStuff_PositiveValue(){ 
     Stuff stuff = new Stuff(10); 
     assertEquals(40, stuff.doStuff()); 
    } 

    @Test 
    public void testDoStuff_DecimalValue(){ 
     Stuff stuff = new Stuff(1.1); 
     assertEquals(4.4, stuff.doStuff()); 
    } 
} 
0

당신이 물건 클래스의 여러 인스턴스를해야합니까? 그렇지 않다면, 아마도 importantVal을 static으로 만들어서 값을 "주입"할 수있을 것입니다. 또는 여러 값을 주입하려면 List?

public class Stuff{ 

    private static List<Double> testVals = new LinkedList()<Double>; 
    private double importantVal; 
    public Stuff(double val) 
    { 
     this.importantval = val; 
    } 

    public static addTest(double test){ 
     testVals.add(test); 
    } 

    public double doStuff() 
    { 
     return 4 * testVals.removeFirst(); 
    } 

}