AnyLogic代理代码如何配置单元测试?
How to configure unit testing for AnyLogic agent code?
您如何配置单元测试框架来帮助开发属于 AnyLogic 代理的代码?
为了拥有合适的测试驱动开发节奏,我需要能够在几秒钟内运行完成所有测试。我想每次都将项目导出为一个独立的应用程序 (jar),但这很慢。
我想尝试将 AnyLogic 之外的所有代码单独编写 类,但是有很多对内置 AnyLogic 类 以及各种代理的引用。我的代码需要以某种方式引用这些,但我不知道该怎么做,除非在 AnyLogic 中编写代码。
我想知道是否有一种方法可以将测试 运行ner 添加为依赖项,并从 AnyLogic 中执行该测试 运行ner。
有人有运行良好的设置吗?
这肯定需要一些高级 Java,但是在构建良好的稳健模型时,测试,尤其是单元测试常常被忽视。我希望这个简单的例子足以让您(和许多其他建模者)继续前进。
对于 Junit 测试,我们使用两个库,您可以将它们添加为模型的依赖项。
现在您要在仿真模型中测试两种主要的逻辑类型。
- Java classes
中的函数
- 模型执行
类型 1:假设我有这个非常简单的 Java class
public class MyClass {
public MyClass() {
}
public boolean getResult() {
return true;
}
}
我想测试功能getResult()
我可以简单地创建一个新的 class 并创建一个用 @Test 修饰符注释的函数,然后还可以使用 assertEquals()
方法,这是 junit 测试中的标准方法
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class MyTestClass{
@Test
public void testMyClassFunction1() {
boolean result = new MyClass().getResult();
assertEquals("The value of the test class 1", result, true);
}
现在是 AnyLogic 的特定实现(还有其他方法可以做到这一点,但这是 easiest/most 有用的,您将在一分钟内看到)
您需要创建自定义实验
现在,如果您从 运行 模型按钮 运行 这个,您将得到这个输出
SUCCESS
Run: 1
Failed: 0
您显然可以根据自己的喜好更新和更改输出
类型 2:假设我们有这个非常简单的模型
而函数 getResult()
只是 returns 一个 int
的 2.
现在我们需要为 运行 这个模型创建另一个自定义实验
然后我们可以对 运行 这个自定义实验编写测试并检查结果
只需将以下内容添加到您的 MyTestClass
@Test
public void testMyClassFunction2() {
int result = new SingleRun(null).runExperiment();
assertEquals("Value of a single run", result, 2);
}
现在,如果您 运行 RunAllTests
客户实验,它会给您这个输出
SUCCESS
Run: 2
Failed: 0
这仅仅是个开始,您可以阅读大量关于使用 junit 的文章
您如何配置单元测试框架来帮助开发属于 AnyLogic 代理的代码?
为了拥有合适的测试驱动开发节奏,我需要能够在几秒钟内运行完成所有测试。我想每次都将项目导出为一个独立的应用程序 (jar),但这很慢。
我想尝试将 AnyLogic 之外的所有代码单独编写 类,但是有很多对内置 AnyLogic 类 以及各种代理的引用。我的代码需要以某种方式引用这些,但我不知道该怎么做,除非在 AnyLogic 中编写代码。
我想知道是否有一种方法可以将测试 运行ner 添加为依赖项,并从 AnyLogic 中执行该测试 运行ner。
有人有运行良好的设置吗?
这肯定需要一些高级 Java,但是在构建良好的稳健模型时,测试,尤其是单元测试常常被忽视。我希望这个简单的例子足以让您(和许多其他建模者)继续前进。
对于 Junit 测试,我们使用两个库,您可以将它们添加为模型的依赖项。
现在您要在仿真模型中测试两种主要的逻辑类型。
- Java classes 中的函数
- 模型执行
类型 1:假设我有这个非常简单的 Java class
public class MyClass {
public MyClass() {
}
public boolean getResult() {
return true;
}
}
我想测试功能getResult()
我可以简单地创建一个新的 class 并创建一个用 @Test 修饰符注释的函数,然后还可以使用 assertEquals()
方法,这是 junit 测试中的标准方法
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class MyTestClass{
@Test
public void testMyClassFunction1() {
boolean result = new MyClass().getResult();
assertEquals("The value of the test class 1", result, true);
}
现在是 AnyLogic 的特定实现(还有其他方法可以做到这一点,但这是 easiest/most 有用的,您将在一分钟内看到)
您需要创建自定义实验
现在,如果您从 运行 模型按钮 运行 这个,您将得到这个输出
SUCCESS
Run: 1
Failed: 0
您显然可以根据自己的喜好更新和更改输出
类型 2:假设我们有这个非常简单的模型
而函数 getResult()
只是 returns 一个 int
的 2.
现在我们需要为 运行 这个模型创建另一个自定义实验
然后我们可以对 运行 这个自定义实验编写测试并检查结果
只需将以下内容添加到您的 MyTestClass
@Test
public void testMyClassFunction2() {
int result = new SingleRun(null).runExperiment();
assertEquals("Value of a single run", result, 2);
}
现在,如果您 运行 RunAllTests
客户实验,它会给您这个输出
SUCCESS
Run: 2
Failed: 0
这仅仅是个开始,您可以阅读大量关于使用 junit 的文章