위의 CER 규칙 세트 해석기를 사용하면 문자열을 통해 규칙 클래스와 속성 이름을 참조할 수 있습니다.
이 해석기를 사용하면 규칙 세트를 완전히 동적으로 구성할 수 있지만 테스트를 위해 문자열을 사용하고 속성 값을 캐스트해야 하는 과정은 번거로울 수 있습니다. 규칙 클래스 또는 속성 이름을 잘못 입력하거나 잘못된 유형의 캐스트를 사용하는 경우 코드가 오류 없이 컴파일될 수는 있지만 런타임 시 오류가 발생합니다.
CER에는 규칙 클래스의 Java 랩퍼 클래스를 생성할 수 있는 코드 생성기가 포함되어 있습니다. 생성된 이러한 클래스를 사용하면 테스트 코드 작성이 간단해지며, 이러한 클래스를 사용하지 않는 경우 런타임 시에만 발생하는 문제점을 컴파일러가 발견할 수 있습니다.
이제 HelloWorldRuleSet를 실행하는 코드를 다음과 같이 다시 작성합니다.
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 코드와의 다음 비교를 참고하십시오.
생성된 코드에는 로컬 시스템의 규칙 세트에 대한 절대 경로가 포함되어 있으므로 여러 시스템에 이식할 수 없습니다.
특히 규칙 세트가 동적으로 변경될 수 있는 프로덕션 환경에서 생성된 코드를 사용하지 않아야 합니다.