Version: 2017.3
Unity Test Runner
IL2CPP

Unity Test Runner のユーティリティー

Unity の Test Runner には、NUnit 制約と使用できるユーティリティーが含まれており、浮動小数点値と Vector2、Vector4 などの非プリミティブオブジェクトを比較できます。これらのクラスは、UnityEngine.TestTools.Utils 名前空間に置かれます。

Class: Utils

ユーティリティー関数を含むクラスです。

AreFloatsEqual

シグネチャ public static bool AreFloatsEqual(float expected, float actual, float allowedRelativeError)

説明 このメソッドは、2 つの浮動小数点が等しいかどうか 相対的なイプシロン比較 を行います。相対誤差を 3 番目の引数として取ります。相対誤差は、絶対誤差を正確な値の絶対値で割ったものです。

使用法

using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class UtilTests
{
    [Test]
    public void FloatsAreEqual()
    {
        float expected = 10e-8f;
        float actual = 0f;
        float allowedRelativeError = 10e-6f;
        Assert.That(Utils.AreFloatsEqual(expected, actual, allowedRelativeError), Is.True);
    }
}

AreFloatsEqualAbsoluteError

シグネチャ public static bool AreFloatsEqualAbsoluteError(float expected, float actual, float allowedAbsoluteError)

説明 このメソッドは、2 つの float が、指定された公差の下で等しいかどうか比較します。

使用法

using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class UtilTests
{
    [Test]
    public void FloatsAreAbsoluteEqual()
    {
        float expected = 0f;
        float actual = 10e-6f;
        float error = 10e-5f;
        Assert.That(Utils.AreFloatsEqualAbsoluteError(expected, actual, error), Is.True);
    }
}

CreatePrimitive

シグネチャ public static GameObject CreatePrimitive(PrimitiveType type)

説明 これは GameObject.CreatePrimitive に似ていますが、パフォーマンスをテストするために最適化されたデフォルトのビルトインシェーダーの代わりに高速シェーダーを持つプリミティブメッシュレンダラーを作成します。 プリミティブメッシュレンダラーとコライダーを持つ GameObjectを返します。

使用法

var box = Utils.CreatePrimitive(PrimitiveType.Cube);

FloatEqualityComparer

これは System.Collections.Generic.IEqualityComparer<float> を実装しています。この比較関数を NUnit 制約とともに使用して、2 つの浮動小数点値を 相対的なイプシロン比較 を使用して等しいかどうかを比較します。内部では、この比較関数は Utils.AreFloatsEqual を使用して浮動小数点値を比較します。

使用法

using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class FloatsTest
{
    [Test]
    public void FloatsAreEqual()
    {
        var comparer = new FloatEqualityComparer(10e-6f);
        var actual = -0.00009f;
        var expected = 0.00009f
        Assert.That(actual, Is.EqualTo(expected).Using(comparer));

        //デフォルトでは、相対誤差 0.0001f を許容します
        var actual = -0.01f;
        var expected = 0.001f
        Assert.That(actual, Is.EqualTo(expected).Using(FloatEqualityComparer.Instance));
    }
}

ColorEqualityComparer

このクラスでは NUnit 制約を使って 2 つの UnityEngine.Color オブジェクトが等しいか比較します。 このクラスは、System.Collections.Generic.IEqualityComparer<Color> インターフェースを実装しています。ColorEqualityComparer コンストラクターで値が提供されていない場合、 0.01f が比較のデフォルト誤差です。

使用法

using UnityEngine;
using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class ColorTest
{
    [Test]
    public void ColorsAreEqual()
    {
        //許容誤差 10e-5f
        var comparer = new ColorEqualityComparer(10e-5f);
        var firstColor = new Color(0f, 0f, 0f, 1f);
        var secondColor = new Color(10e-6f, 0f, 0f, 1f);
        Assert.That(firstColor, Is.EqualTo(secondColor).Using(comparer));

        //許容誤差を使用
        firstColor = new Color(0f, 0f, 0f, 0f);
        secondColor = new Color(0f, 0f, 0f, 0f);
        Assert.That(firstColor, Is.EqualTo(secondColor).Using(ColorEqualityComparer.Instance));
    }
}

QuaternionEqualityComparer

このクラスでは NUnit 制約を使って 2 つの UnityEngine.Quaternion オブジェクトが等しいか比較します。 このクラスは System.Collections.Generic.IEqualityComparer<Quaternion> インターフェースを実装しています。 静的インスタンス Instanceを使用して、デフォルト誤差 0.00001f を使い比較します。 カスタムの誤差値には、単一の引数コンストラクターを使用します。

使用法

using UnityEngine;
using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class QuaternionTest
{
    [Test]
    public void QuaternionsAreEqual()
    {
        var actual = new Quaternion(10f, 0f, 0f, 0f);
        var expected = new Quaternion(1f, 10f, 0f, 0f);
        var comparer = new QuaternionEqualityComparer(10e-6f);
        Assert.That(actual, Is.EqualTo(expected).Using(comparer));
    }
}

Vector2EqualityComparer

このクラスでは NUnit 制約を使って 2 つの UnityEngine.Vector2 オブジェクトが等しいか比較します。 このクラスは System.Collections.Generic.IEqualityComparer<Vector2> インターフェースを実装しています。 静的な Instance メンバーを使用して、デフォルト誤差 0.0001f を使い比較します。比較関数オブジェクトをコンストラクトするときに、カスタムの誤差値を指定できます。Utils.AreFloatsEqual相対的なイプシロン比較 (相対誤差は絶対誤差を正確な値で割ったものです) を使って個々の座標を比べます。

使用法

using UnityEngine;
using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class Vector2Test
{
    [Test]
    public void Vector2AreEqual()
    {
        //カスタムの誤差
        var actual = new Vector2(10e-7f, 10e-7f);
        var expected = new Vector2(0f, 0f);
        var comparer = new Vector2EqualityComparer(10e-6f);
        Assert.That(actual, Is.EqualTo(expected).Using(comparer));

        //デフォルトの誤差 0.0001f
        actual = new Vector2(0.01f, 0.01f);
        expected = new Vector2(0.01f, 0.01f);
        Assert.That(actual, Is.EqualTo(expected).Using(Vector2EqualityComparer.Instance));
    }
}

Vector3EqualityComparer

このクラスでは NUnit 制約を使って 2 つの UnityEngine.Vector3 オブジェクトが等しいか比較します。 このクラスは System.Collections.Generic.IEqualityComparer<Vector3> インターフェースを実装しています。 静的な Instance メンバーを使用して、デフォルト誤差 0.0001f を使い比較します。比較関数オブジェクトをコンストラクトするときに、カスタムの誤差値を指定できます。Utils.AreFloatsEqual相対的なイプシロン比較 (相対誤差は絶対誤差を正確な値で割ったものです) を使って個々の座標を比べます。

使用法


using UnityEngine;
using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class Vector3Test
{
    [Test]
    public void Vector3AreEqual()
    {
        //カスタムの誤差 10e-6f
        var actual = new Vector3(10e-8f, 10e-8f, 10e-8f);
        var expected = new Vector3(0f, 0f, 0f);
        var comparer = new Vector3EqualityComparer(10e-6f);
        Assert.That(actual, Is.EqualTo(expected).Using(comparer));

        //デフォルト誤差 0.0001f
        actual = new Vector3(0.01f, 0.01f, 0f);
        expected = new Vector3(0.01f, 0.01f, 0f);
        Assert.That(actual, Is.EqualTo(expected).Using(Vector3EqualityComparer.Instance));
    }
}

Vector4EqualityComparer

このクラスでは NUnit 制約を使って 2 つの UnityEngine.Vector4 オブジェクトが等しいか比較します。 このクラスは System.Collections.Generic.IEqualityComparer<Vector4> インターフェースを実装しています。 静的な Instance メンバーを使用して、デフォルト誤差 0.0001f を使い比較します。比較関数オブジェクトをコンストラクトするときに、カスタムの誤差値を指定できます。Utils.AreFloatsEqual相対的なイプシロン比較 (相対誤差は絶対誤差を正確な値で割ったものです) を使って個々の座標を比べます。

使用法

using UnityEngine;
using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class Vector4Test
{
    [Test]
    public void Vector4AreEqual()
    {
        //カスタムの誤差 10e-6f
        var actual = new Vector4(0, 0, 1e-6f, 1e-6f);
        var expected = new Vector4(1e-6f, 0f, 0f, 0f);
        var comparer = new Vector4EqualityComparer(10e-6f);
        Assert.That(actual, Is.EqualTo(expected).Using(comparer));

        //デフォルト誤差 0.0001f
        actual = new Vector4(0.01f, 0.01f, 0f, 0f);
        expected = new Vector4(0.01f, 0.01f, 0f, 0f);
        Assert.That(actual, Is.EqualTo(expected).Using(Vector4EqualityComparer.Instance));
    }
}

Vector2ComparerWithEqualsOperator

このクラスでは NUnit 制約を使って 2 つの UnityEngine.Vector2 オブジェクトが等しいか比較します。 このクラスは、System.Collections.Generic.IEqualityComparer<Vector2> インターフェースを実装しています。UnityEngine.Vector2 のオーバーロードの operator== を使い、2 つの Vector2 オブジェクトを比較します。

使用法

using UnityEngine;
using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class Vector2Test
{
    [Test]
    public void VectorsAreEqual()
    {
        var actual = new Vector2(10e-7f, 10e-7f);
        var expected = new Vector2(0f, 0f);
        Assert.That(actual, Is.EqualTo(expected).Using(Vector2ComparerWithEqualsOperator.Instance));
    }
}

Vector3ComparerWithEqualsOperator

このクラスでは NUnit 制約を使って 2 つの UnityEngine.Vector3 オブジェクトが等しいか比較します。 このクラスは、System.Collections.Generic.IEqualityComparer<Vector3> インターフェースを実装しています。UnityEngine.Vector3 のオーバーロードの operator== を使い、2 つの Vector3 オブジェクトを比較します。

使用法

using UnityEngine;
using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class Vector3Test
{
    [Test]
    public void VectorsAreEqual()
    {
        var actual = new Vector3(10e-7f, 10e-7f, 10e-7f);
        var expected = new Vector2(0f, 0f, 0f);
        Assert.That(actual, Is.EqualTo(expected).Using(Vector3ComparerWithEqualsOperator.Instance));
    }
}

Vector4ComparerWithEqualsOperator

このクラスでは NUnit 制約を使って 2 つの UnityEngine.Vector4 オブジェクトが等しいか比較します。 このクラスは、System.Collections.Generic.IEqualityComparer<Vector4> インターフェースを実装しています。UnityEngine.Vector4 のオーバーロードの operator== を使い、2 つの Vector4 オブジェクトを比較します。

使用法

using UnityEngine;
using NUnit.Framework;
using UnityEngine.TestTools.Utils;

[TestFixture]
public class Vector4Test
{
    [Test]
    public void Vector4AreEqual()
    {
        var actual = new Vector4(0, 0, 1e-6f, 1e-6f);
        var expected = new Vector4(1e-6f, 0f, 0f, 0f);
        Assert.That(actual, Is.EqualTo(expected).Using(Vector4ComparerWithEqualsOperator.Instance));
    }
}

  • 2017–08–30 限られた 編集レビュー でパブリッシュされたページ

  • 再生モードテストフレームワークユーティリティーは 2017.3 で追加NewIn20173

Unity Test Runner
IL2CPP