⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dotnetblockconsequencetests.cs

📁 drools 一个开放源码的规则引擎
💻 CS
字号:
using System;
using NUnit.Framework;
using NMock;
using org.drools.rule;
using org.drools.semantics.dotnet;
using org.drools.smf;
using org.drools.spi;


namespace org.drools.dotnet.tests.semantics
{
	[TestFixture]
	public class DotNetBlockConsequenceTests
	{
		[Test]
		public void TestBlockConsequence()
		{
			Rule rule = CreateRule();
			Int64 startTime = DateTime.Now.Ticks;
			Consequence c = new DotNetBlockConsequence(rule, 1, "System.Threading.Thread.Sleep(1000);");
			Mock tupleMock = new DynamicMock(typeof(Tuple));
			tupleMock.ExpectAndReturn("get", "test", rule.getParameterDeclaration("param1"));
			tupleMock.ExpectAndReturn("get", 1, rule.getParameterDeclaration("param2"));
			c.invoke((Tuple)tupleMock.MockInstance);
			tupleMock.Verify();

			Int64 endTime = DateTime.Now.Ticks;
			TimeSpan span = new TimeSpan(endTime - startTime);
			Assert.IsTrue(span.Seconds >= 1);
		}

		[Test]
		[ExpectedException(typeof(CodeCompilationException))]
		public void TestCompilationError()
		{
			Rule rule = CreateRule();
			Consequence c = new DotNetBlockConsequence(rule, 1, "foobar...");
		}

		[Test]
		[ExpectedException(typeof(ConsequenceException))]
		public void TestRuntimeError()
		{
			Rule rule = CreateRule();
			Consequence c = new DotNetBlockConsequence(rule, 1, "Console.WriteLine(param1.ToString());");
			Mock tupleMock = new DynamicMock(typeof(Tuple));
			tupleMock.ExpectAndReturn("get", null, rule.getParameterDeclaration("param1"));
			tupleMock.ExpectAndReturn("get", 0, rule.getParameterDeclaration("param2"));
			c.invoke((Tuple)tupleMock.MockInstance);
		}

		[Test]
		public void TestFactory()
		{
			Mock configMock = new DynamicMock(typeof(Configuration));
			Configuration config = (Configuration)configMock.MockInstance;
			configMock.ExpectAndReturn("getText", "", null);

			Mock rbcMock = new DynamicMock(typeof(RuleBaseContext));
			RuleBaseContext rbc = (RuleBaseContext)rbcMock.MockInstance;
			rbcMock.ExpectAndReturn("get", null, "dotnet-consequence-id");
			rbcMock.Expect("put", new object[] { "dotnet-consequence-id", 1 });

			Rule rule = CreateRule();
			ConsequenceFactory factory = new DotNetBlockConsequenceFactory();
			Consequence consequence = factory.newConsequence(rule, rbc, config);
			configMock.Verify();
			rbcMock.Verify();

			Assert.IsNotNull(consequence);
		}

		private Rule CreateRule()
		{
			RuleSet ruleset = new RuleSet("test ruleset");
			Rule rule = new Rule("test rule", ruleset);
			rule.setImporter(new DotNetImporter());
			rule.addParameterDeclaration("param1", new DotNetObjectType(typeof(String)));
			rule.addParameterDeclaration("param2", new DotNetObjectType(typeof(Int32)));
			return rule;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -