{!See https://docs.google.com/document/d/1takg_GmIBBKKTj-GHZCwzxohpQz7Bhekivkk72kYMtE/edit for reference implementation of OneTrust, dataLayer and GTM} {!OneTrust Cookies Consent} {!OneTrust Cookies Consent end} {!dataLayer initialization push} {!dataLayer initialization push end} {!Google Tag Manager} {!Google Tag Manager end} 2. Arrange, Act, Assert | Test Framework | 1.3.9
docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    2. Arrange, Act, Assert

    Learning Objectives

    In this exercise, you will learn about the core unit testing principle of AAA (Arrange, Act, Assert), which will help you structure your unit test.

    Intro and Motivation

    The Arrange, Act, Assert concept is an industry standard in unit testing. It allows for a clear distinction of the code for setting up your test, carrying out the test, and evaluation. Using this can make your test more readable both for yourself and for your colleagues.

    In the first part of the code, we arrange all the elements needed for the test. In the middle part, we act on the object that is under test. In the final part, we assert on the result of the act part. The three parts of the code are usually separated by an empty line.

    An example of Arrange, Act, Assert could look like the following:

    [Test]
    public void StringWriterTest()
    {
     // Arrange
     var stringWriterUnderTest = new StringWriter();
     stringWriterUnderTest.NewLine = "\\n";
     var testStringA = "I am testing";
     var testStringB = "with new line";
    
     // Act
     stringWriterUnderTest.WriteLine(testStringA);
     stringWriterUnderTest.WriteLine(testStringB);
    
     // Assert
     Assert.AreEqual("I am testing\\nwith new line\\n", stringWriterUnderTest.ToString());
    }
    

    It is good practice to use XUnderTest as a variable name of the class that is being tested. This helps to keep the focus of the test clean.

    The Act part of the code should have as few lines as possible, reflecting what is actually being tested. The assert should in the optimal case only contain assert calls, but it can also be necessary to include some lines of logic to allow for the assertion.

    Exercise

    Import the sample 2_ActArrangeAssert into your Unity Editor (version 2019.2 or newer) from the Package Manager window.

    In this project we have a class called StringFormatter. It has two methods of interest: void Configure(string joinDelimiter) and string Join(object[] args).

    The goal of this exercise is to write one or more tests, testing the Join method. For example, testing that it can join with a ";" (semicolon) delimiter.

    Hints

    • Setup of the test input and the call to Configure(";") would go into the Arrange part of your test.
    • It is good practice to separate the three parts of your test (arrange, act and assert) with a blank line.

    Solution

    The exercise can be solved with a test like the following:

    [Test]
    public void JoinsObjectsWithSemiColon()
    {
     // Arrange
     var formatterUnderTest = new StringFormatter();
     formatterUnderTest.Configure(";");
     var objects = new object[] {"a", "bc", 5, "d"};
     
     // Act
     var result = formatterUnderTest.Join(objects);
     
     // Assert
     Assert.AreEqual("a;bc;5;d", result);
    }
    

    A full project with the solution can be found in the sample 2_ActArrangeAssert_Solution.

    Further reading and Resources

    The AAA concept is a widely used standard which you can read more about in many online sources, including this blogpost.


    Did you find this page useful? Please give it a rating:

    Thanks for rating this page!

    Report a problem on this page

    What kind of problem would you like to report?

    • This page needs code samples
    • Code samples do not work
    • Information is missing
    • Information is incorrect
    • Information is unclear or confusing
    • There is a spelling/grammar error on this page
    • Something else

    Thanks for letting us know! This page has been marked for review based on your feedback.

    If you have time, you can provide more information to help us fix the problem faster.

    Provide more information

    You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:

    You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:

    You've told us there is information missing from this page. Please tell us more about what's missing:

    You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:

    You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:

    You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:

    You've told us this page has a problem. Please tell us more about what's wrong:

    Thank you for helping to make the Unity documentation better!

    Your feedback has been submitted as a ticket for our documentation team to review.

    We are not able to reply to every ticket submitted.

    In This Article
    • Learning Objectives
    • Intro and Motivation
    • Exercise
    • Hints
    • Solution
    • Further reading and Resources
    Back to top
    Copyright © 2023 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)