{"data":{"markdownRemark":{"html":"<h2 id=\"creating-a-test-and-adding-agents\"><a href=\"#creating-a-test-and-adding-agents\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Creating a test and adding agents</h2>\n<p>Tests take place in a controlled environment, allowing you to isolate agent behaviour and verify expected functionality. All tests take place in a TestKit; In the same way, our models run in  AgentBasedModel our tests run in a TestKit.</p>\n<p>For the following section, we will be adding tests to the model created in the tutorial section. Don't worry if you have not compleated the tutorial; examples will be self-contained, for the interested reader you can find this tutorial <a href=\":version/tutorials/mortgage\">here</a>.</p>\n<p>Given all our tests require a TestKit it would be handy if we did not have to keep setting up the TestKit for each test we wanted to run. JUnit allows you to annotate methods with @Before. Code annotated in this fashion will be executed before each test.</p>\n<p class=\"code-header\">Creating your first TestKit  (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BankTest</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">private</span> TestKit<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> testKit<span class=\"token punctuation\">;</span>\n    <span class=\"token annotation punctuation\">@Before</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n         testKit <span class=\"token operator\">=</span> TestKit<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Notice that we have passed the user-defined globals object to <code class=\"language-text\">TestKit.create()</code>, which we discussed in the <a href=\":version/reference/agents/global-state\">Global State</a>. If our model uses the default <code class=\"language-text\">GlobalState</code> this argument can be omitted.</p>\n<p>To carry out meaningful tests we have to add agents to the TestKit. We can add agents to a TestKit in a similar manner to adding agents to an AgentBasedModel. Agents added to the same Testkit do not have knowledge of each other; however, you may want to add multiple agents to a single TestKit to test different cases of the same functionality on different agents in one test.</p>\n<p class=\"code-header\">Adding agents (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">creatingAgent</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  Bank bank1 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>       \n  Bank bank2 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Of course, this is not much of a test, we have merely added an agent to our TestKit. Improving upon this, we can also create agents with data injectors. Because we are in a test environment, we can then assert that agents are created as expected.</p>\n<p class=\"code-header\">Adding agents with data injector (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>    \n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">agentShouldBeInitilisedWithInjectedArgs</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  Bank bank <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> b <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n    b<span class=\"token punctuation\">.</span>debt <span class=\"token operator\">=</span> <span class=\"token number\">9</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">,</span> <span class=\"token number\">9</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"ui segment info message\"><h4>Making variables visible for testing</h4>If you have issues regarding variables and methods being visible in your unit tests, check your test packaging mirrors your code packages.</div>\n<h2 id=\"testing-simple-actions\"><a href=\"#testing-simple-actions\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Testing simple actions</h2>\n<p>As mentioned, we test actions in isolation. After creating a <code class=\"language-text\">TestKit</code> and adding agents, we are ready to test. There are three ways to test an action has executed as expected. One is to examine how the action has mutated an agent. Another involves inspecting the return type (<code class=\"language-text\">TestResult</code>) of our <code class=\"language-text\">testAction</code> method. Finally, <code class=\"language-text\">TestKit</code> can hold accumulators which we can mutate; these need to be initialized for testing actions that mutate or use the value of accumulators.</p>\n<h3 id=\"testing-agents-mutations\"><a href=\"#testing-agents-mutations\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Testing agents mutations</h3>\n<p>Suppose we have a <code class=\"language-text\">Household</code> agent that has an age associated with it and an <code class=\"language-text\">Action</code> that increments its age by one.</p>\n<p class=\"code-header\">Simple 'birthday' action (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> birthday <span class=\"token operator\">=</span>\n      Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> h <span class=\"token operator\">-</span><span class=\"token operator\">></span> h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p class=\"code-header\">Simple 'birthday' test (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">birthdayShouldIncrementAgeByOne</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  Household household <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> h <span class=\"token operator\">-</span><span class=\"token operator\">></span> h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">=</span> <span class=\"token number\">49</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>birthday<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">.</span>age<span class=\"token punctuation\">,</span> <span class=\"token number\">50</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"inspecting-the-result-of-an-action\"><a href=\"#inspecting-the-result-of-an-action\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Inspecting the 'result' of an action.</h3>\n<p>As well as being able to test for mutations on agents we can also use the returned <code class=\"language-text\">TestResult</code> object to check the following:</p>\n<ul>\n<li>If an agent has been stopped.</li>\n<li>How actions affect accumulators.</li>\n<li>Agents that were spawned.</li>\n<li>Messages that may have been sent in an action.</li>\n</ul>\n<p>We will address the first two of these now and the final point after discussing how messaging works in the test environment.</p>\n<h4 id=\"testing-that-an-agent-has-been-stopped\"><a href=\"#testing-that-an-agent-has-been-stopped\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Testing that an agent has been stopped</h4>\n<p>Suppose the complexity of our birthday <code class=\"language-text\">Action</code> is extended slightly, to stop an agent if it reaches a certain age.</p>\n<p class=\"code-header\">Simple 'birthday' action with 'death' (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> birthday <span class=\"token operator\">=</span>\n      Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n          Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n          h <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">>=</span> <span class=\"token number\">99</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">stop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n              h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>We can use the result of <code class=\"language-text\">testAction</code> to check if the agent has been stopped. Notice that each action has a separate <code class=\"language-text\">testResult</code>, this highlights the isolated nature of actions in the <code class=\"language-text\">TestKit</code> and makes it easy to reason about them.</p>\n<p class=\"code-header\">Simple 'birthday' test with 'death' (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">oldAgentsShouldStop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  Household household1 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> h <span class=\"token operator\">-</span><span class=\"token operator\">></span> h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">=</span> <span class=\"token number\">49</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  Household household2 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> h <span class=\"token operator\">-</span><span class=\"token operator\">></span> h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">=</span> <span class=\"token number\">99</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  TestResult testResult1 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household1<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>birthday<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  TestResult testResult2 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household2<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>birthday<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">assertFalse</span><span class=\"token punctuation\">(</span>testResult1<span class=\"token punctuation\">.</span><span class=\"token function\">wasStopped</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">assertTrue</span><span class=\"token punctuation\">(</span>testResult2<span class=\"token punctuation\">.</span><span class=\"token function\">wasStopped</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"ui segment info message\"><h4>A broken clock is right twice a day</h4>It is useful to test all the possible outcomes of an action to make sure you do not get any false positive results.</div>\n<h3 id=\"testing-the-use-of-accumulators-in-actions\"><a href=\"#testing-the-use-of-accumulators-in-actions\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Testing the use of accumulators in actions</h3>\n<p>We can also create long accumulators in a test kit. These will need to be created to test actions that use the value of an existing accumulator, or action that add to accumulators. For example suppose we wanted to keep track of how many agents were dying in the model, and we were using an accumulator to gather this information from our model. We could test that our action is actually updating the accumulator.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">// Action that updates accumulator on death</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> birthday <span class=\"token operator\">=</span>\n      Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n          Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n          h <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">>=</span> <span class=\"token number\">99</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"deaths\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">stop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n              h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@Test</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">deadAgentShouldUpdateAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  Household household1 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> h <span class=\"token operator\">-</span><span class=\"token operator\">></span> h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">long</span> initialValue <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"deaths\"</span><span class=\"token punctuation\">,</span> initialValue<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  TestResult result1 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household1<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>birthday<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialValue <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> result1<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"deaths\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>It is important to note that updating an accumulator from within a tested action does not update the testKit accumulator, instead it returns a new updated accumulator with the <code class=\"language-text\">TestResult</code> that can be tested. This is so that multiple tests can be run using the same testKit without affecting the results of each other.</p>\n<p>It is also possible to get the value of an accumulator</p>\n<div class=\"ui segment info message\"><h4>Initialising accumulators</h4>Long accumulators have a count associated with them used for calculating the mean. We can initialise accumulators with an initial value and initial count; this might be necessary to initialize when the action being tested uses the current count/mean of the accumulator.</div>\n<h3 id=\"testing-agent-spawning\"><a href=\"#testing-agent-spawning\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Testing agent spawning</h3>\n<p>Suppose our households gave birth to new households based on some predicate, and adds a link from the new household back to the parent household.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> birthday <span class=\"token operator\">=</span>\n      Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n          Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n          h <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">==</span> <span class=\"token number\">35</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">spawn</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> newH <span class=\"token operator\">-</span><span class=\"token operator\">></span> newH<span class=\"token punctuation\">.</span><span class=\"token function\">addLink</span><span class=\"token punctuation\">(</span>h<span class=\"token punctuation\">.</span><span class=\"token function\">getID</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> ParentLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">}</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>We can use the result of <code class=\"language-text\">testAction</code> to check if the agent has been spawned, and get details about these spawned agents.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">agentsShouldCreateNewAgents</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  Household household1 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> h <span class=\"token operator\">-</span><span class=\"token operator\">></span> h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">=</span> <span class=\"token number\">35</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  Household household2 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> h <span class=\"token operator\">-</span><span class=\"token operator\">></span> h<span class=\"token punctuation\">.</span>age <span class=\"token operator\">=</span> <span class=\"token number\">99</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  TestResult testResult1 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household1<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>birthday<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  TestResult testResult2 <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household2<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>birthday<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">assertTrue</span><span class=\"token punctuation\">(</span>testResult1<span class=\"token punctuation\">.</span><span class=\"token function\">getSpawnedAgentsOfType</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">assertTrue</span><span class=\"token punctuation\">(</span>testResult1<span class=\"token punctuation\">.</span><span class=\"token function\">getSpawnedAgentsOfType</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  Household newHousehold <span class=\"token operator\">=</span> testResult1<span class=\"token punctuation\">.</span><span class=\"token function\">getSpawnedAgentsOfType</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">assertTrue</span><span class=\"token punctuation\">(</span>newHousehold<span class=\"token punctuation\">.</span><span class=\"token function\">getLinksTo</span><span class=\"token punctuation\">(</span>household1<span class=\"token punctuation\">.</span><span class=\"token function\">getID</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"sending-and-receiving-messages\"><a href=\"#sending-and-receiving-messages\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Sending and receiving messages</h2>\n<h3 id=\"sending-messages-before-executing-an-action\"><a href=\"#sending-messages-before-executing-an-action\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Sending messages before executing an action</h3>\n<p>We have already mentioned how agents are tested in isolation. Given an integral component of the Simudyne architecture is message passing you may wonder how the test kit handles this. To test how actions process messages we must send agents messages before running an action. This is in contrast to our AgentBasedModel where message passing is between agents. This allows us to construct the exact message we wish to test on an agent.</p>\n<p class=\"code-header\">Sending a message to an agent (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">sendPayementMessagesTest</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  Bank bank <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  testKit<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> payment <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n    payment<span class=\"token punctuation\">.</span>repayment<span class=\"token operator\">=</span><span class=\"token number\">9</span><span class=\"token punctuation\">;</span>\n    payment<span class=\"token punctuation\">.</span>amount<span class=\"token operator\">=</span><span class=\"token number\">11</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span><span class=\"token function\">getID</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>We can think of this as putting a message directly into the inbox of the agent. On executing an action our bank agent will have this message to process. Let's take a look at a simple example where our bank processes payments by merely incrementing assets by the payment amount. For completeness, the Action is given below.</p>\n<p class=\"code-header\">Processing a message in an action (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> simplePaymentIncrement <span class=\"token operator\">=</span>\n      <span class=\"token keyword\">new</span> <span class=\"token class-name\">Action</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span>\n          Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n          bank <span class=\"token operator\">-</span><span class=\"token operator\">></span>\n              bank<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>payment <span class=\"token operator\">-</span><span class=\"token operator\">></span> bank<span class=\"token punctuation\">.</span>assets <span class=\"token operator\">+=</span> payment<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>We can use the test kit to test this action is processing in the expected way.</p>\n<p class=\"code-header\">Testing actions (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">sendPaymentMessagesTest</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n Bank bank <span class=\"token operator\">=</span>\n     testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>\n         Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n         b <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n           b<span class=\"token punctuation\">.</span>assets <span class=\"token operator\">=</span> <span class=\"token number\">90</span><span class=\"token punctuation\">;</span>\n         <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n testKit\n     <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n         Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n         payment <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n           payment<span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\n           payment<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\n         <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n     <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span><span class=\"token function\">getID</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Bank<span class=\"token punctuation\">.</span>simplePaymentIncremement<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>If you find yourself sending multiple messages to the same agent, you can distinguish between senders by including the id of the sender. This is done by passing an extra parameter to the <code class=\"language-text\">send()</code> method; we will look at an example of this in the next section.</p>\n<h3 id=\"intercepting-messages-sent-in-actions\"><a href=\"#intercepting-messages-sent-in-actions\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Intercepting messages sent in Actions</h3>\n<p>Processing received messages are only half the story. Agents must also be able to send messages, which we will want to test. Messages sent in an agents action are captured by the testResult object.</p>\n<p>For illustrative purposes, let's create an <code class=\"language-text\">Action</code> in the bank that sends an <code class=\"language-text\">ApplicationSuccessful</code> message to an agent with an id of one.</p>\n<p class=\"code-header\">Simple action that sends a message to a fixed id (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> sendApplicationSuccessfulMessage <span class=\"token operator\">=</span>\n      <span class=\"token keyword\">new</span> <span class=\"token class-name\">Action</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">></span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> bank <span class=\"token operator\">-</span><span class=\"token operator\">></span> bank<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span>L<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>We can use this action in <code class=\"language-text\">testKit</code> and test two things. Firstly, that a message is being sent, and secondly, that it is being sent to the correct agent.</p>\n<p class=\"code-header\">Testing messages sent in an action (Java)</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">captureSentMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n   Bank bank <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   TestResult result <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Bank<span class=\"token punctuation\">.</span>sendApplicationSuccessfulMessage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">></span></span> messages <span class=\"token operator\">=</span>\n       result<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> messages<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> messages<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getTo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span></code></pre></div>","headings":[{"value":"Creating a test and adding agents","depth":2},{"value":"Testing simple actions","depth":2},{"value":"Testing agents mutations","depth":3},{"value":"Inspecting the 'result' of an action.","depth":3},{"value":"Testing that an agent has been stopped","depth":4},{"value":"Testing the use of accumulators in actions","depth":3},{"value":"Testing agent spawning","depth":3},{"value":"Sending and receiving messages","depth":2},{"value":"Sending messages before executing an action","depth":3},{"value":"Intercepting messages sent in Actions","depth":3}],"frontmatter":{"title":"Using TestKit","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.4/reference/test_kit/test_kit.md","versioned":true,"version":"2.4","kind":"reference","pagePath":"/reference/test_kit/test_kit","chronology":{"prev":{"name":"TestKit Setup","path":"/reference/test_kit/intro"},"next":{"name":"Extended Example","path":"/reference/test_kit/extended_example"}},"lastUpdated":"2026-01-27T20:34:36.177Z"}}