我在Eclipse中有以下测试类:
package org.drools.example;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.compiler.DroolsError;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderErrors;
import org.drools.rule.Package;
public class RuleTest {
//@Test
public void shouldFireHelloWorld() throws IOException, DroolsParserException {
RuleBase ruleBase = initialiseDrools();
WorkingMemory workingMemory = initializeMessageObjects(ruleBase);
int expectedNumberOfRulesFired = 1;
int actualNumberOfRulesFired = workingMemory.fireAllRules();
assertThat(actualNumberOfRulesFired, is(expectedNumberOfRulesFired));
}
private RuleBase initialiseDrools() throws IOException, DroolsParserException {
PackageBuilder packageBuilder = readRuleFiles();
return addRulesToWorkingMemory(packageBuilder);
}
private PackageBuilder readRuleFiles() throws DroolsParserException, IOException {
PackageBuilder packageBuilder = new PackageBuilder();
String ruleFile = "/org/drools/example/helloWorld.drl";
Reader reader = getRuleFileAsReader(ruleFile);
packageBuilder.addPackageFromDrl(reader);
assertNoRuleErrors(packageBuilder);
return packageBuilder;
}
private Reader getRuleFileAsReader(String ruleFile) {
InputStream resourceAsStream = getClass().getResourceAsStream(ruleFile);
return new InputStreamReader(resourceAsStream);
}
private RuleBase addRulesToWorkingMemory(PackageBuilder packageBuilder) {
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
Package rulesPackage = packageBuilder.getPackage();
ruleBase.addPackage(rulesPackage);
return ruleBase;
}
private void assertNoRuleErrors(PackageBuilder packageBuilder) {
PackageBuilderErrors errors = packageBuilder.getErrors();
if (errors.getErrors().length > 0) {
StringBuilder errorMessages = new StringBuilder();
errorMessages.append("Found errors in package builder\n");
for (int i = 0; i < errors.getErrors().length; i++) {
DroolsError errorMessage = errors.getErrors()[i];
errorMessages.append(errorMessage);
errorMessages.append("\n");
}
errorMessages.append("Could not parse knowledge");
throw new IllegalArgumentException(errorMessages.toString());
}
}
private WorkingMemory initializeMessageObjects(RuleBase ruleBase) {
WorkingMemory workingMemory = ruleBase.newStatefulSession();
createHelloWorld(workingMemory);
return workingMemory;
}
private void createHelloWorld(WorkingMemory workingMemory) {
Message helloMessage = new Message();
helloMessage.setType("Hello");
workingMemory.insert(helloMessage);
}
}
当我右键单击* .class时,我只能看到Run-&gt; Run configuration。我应该在Configuration中选择哪些设置才能执行此程序? 如果我将它作为Java Application运行,它会说:
JUnit version 4.10
Time: 0.001
OK (0 tests)
答案 0 :(得分:0)
这是因为RuleTest没有扩展你应该做的Junit Base测试类让Eclipse知道它的Junt类