AnyLogic代理代码如何配置单元测试?

How to configure unit testing for AnyLogic agent code?

您如何配置单元测试框架来帮助开发属于 AnyLogic 代理的代码?

为了拥有合适的测试驱动开发节奏,我需要能够在几秒钟内运行完成所有测试。我想每次都将项目导出为一个独立的应用程序 (jar),但这很慢。

我想尝试将 AnyLogic 之外的所有代码单独编写 类,但是有很多对内置 AnyLogic 类 以及各种代理的引用。我的代码需要以某种方式引用这些,但我不知道该怎么做,除非在 AnyLogic 中编写代码。

我想知道是否有一种方法可以将测试 运行ner 添加为依赖项,并从 AnyLogic 中执行该测试 运行ner。

有人有运行良好的设置吗?

这肯定需要一些高级 Java,但是在构建良好的稳健模型时,测试,尤其是单元测试常常被忽视。我希望这个简单的例子足以让您(和许多其他建模者)继续前进。

对于 Junit 测试,我们使用两个库,您可以将它们添加为模型的依赖项。

现在您要在仿真模型中测试两种主要的逻辑类型。

  1. Java classes
  2. 中的函数
  3. 模型执行

类型 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 的文章