CER 테스트 코드 생성기

위의 CER 규칙 세트 해석기를 사용하면 문자열을 통해 규칙 클래스와 속성 이름을 참조할 수 있습니다.

이 해석기를 사용하면 규칙 세트를 완전히 동적으로 구성할 수 있지만 테스트를 위해 문자열을 사용하고 속성 값을 캐스트해야 하는 과정은 번거로울 수 있습니다. 규칙 클래스 또는 속성 이름을 잘못 입력하거나 잘못된 유형의 캐스트를 사용하는 경우 코드가 오류 없이 컴파일될 수는 있지만 런타임 시 오류가 발생합니다.

CER에는 규칙 클래스의 Java 랩퍼 클래스를 생성할 수 있는 코드 생성기가 포함되어 있습니다. 생성된 이러한 클래스를 사용하면 테스트 코드 작성이 간단해지며, 이러한 클래스를 사용하지 않는 경우 런타임 시에만 발생하는 문제점을 컴파일러가 발견할 수 있습니다.

이제 HelloWorldRuleSet를 실행하는 코드를 다음과 같이 다시 작성합니다.

그림 1. CER 생성 테스트 규칙 클래스를 사용하여 규칙 실행
package curam.creole.example;

import junit.framework.TestCase;
import curam.creole.execution.session.RecalculationsProhibited;
import curam.creole.execution.session.Session;
import curam.creole.execution.session.Session_Factory;
import
 curam.creole.execution.session.StronglyTypedRuleObjectFactory;
import curam.creole.ruleclass.HelloWorldRuleSet.impl.HelloWorld;
import
 curam.creole.ruleclass.HelloWorldRuleSet.impl.HelloWorld_Factory;
import curam.creole.storage.inmemory.InMemoryDataStorage;

public class TestHelloWorldCodeGen extends TestCase {

  /**
   * 독립형 Java 애플리케이션으로 클래스를 실행합니다.
   */
  public static void main(final String[] args) {

    final TestHelloWorldCodeGen testHelloWorld =
        new TestHelloWorldCodeGen();
    testHelloWorld.testUsingGeneratedTestClasses();

  }

  /**
   * 명백한 유형 지정 및 쉬운 코딩 테스트를 위해 CER 생성
   * 테스트 클래스를 사용하는 단순 테스트 케이스입니다.
   */
  public void testUsingGeneratedTestClasses() {

    /* 명백하게 유형 지정된 세션 시작 */
    final Session session =
        Session_Factory.getFactory().newInstance(
            new RecalculationsProhibited(),
            new InMemoryDataStorage(
                new StronglyTypedRuleObjectFactory()));

    /*
     * 생성된 팩토리를 사용하여 필수 규칙
     * 클래스의 규칙 오브젝트 인스턴스 작성
     */
    final HelloWorld helloWorld =
        HelloWorld_Factory.getFactory().newInstance(session);

    /*
     * 생성된 액세서를 사용하여 "greeting" 규칙 속성에
     * 도달합니다. 캐스트할 필요가 없으며 속성 이름에
     * 오류가 있으면 컴파일 오류가 발생합니다.
     */
    final String greeting = helloWorld.greeting().getValue();

    System.out.println(greeting);
    assertEquals("Hello, world!", greeting);
  }

}

TestHelloWorldInterpreted 코드와의 다음 비교를 참고하십시오.

경고: 생성된 코드는 코드의 변경사항을 간단하게 다시 컴파일하는 테스트 환경에서만 사용하도록 고안되었습니다.

생성된 코드에는 로컬 시스템의 규칙 세트에 대한 절대 경로가 포함되어 있으므로 여러 시스템에 이식할 수 없습니다.

특히 규칙 세트가 동적으로 변경될 수 있는 프로덕션 환경에서 생성된 코드를 사용하지 않아야 합니다.