Unity の Test Runner には、NUnit
制約と使用できるユーティリティーが含まれており、浮動小数点値と Vector2、Vector4 などの非プリミティブオブジェクトを比較できます。これらのクラスは、UnityEngine.TestTools.Utils
名前空間に置かれます。
ユーティリティー関数を含むクラスです。
シグネチャ 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);
}
}
シグネチャ 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);
}
}
シグネチャ public static GameObject CreatePrimitive(PrimitiveType type)
説明
これは GameObject.CreatePrimitive
に似ていますが、パフォーマンスをテストするために最適化されたデフォルトのビルトインシェーダーの代わりに高速シェーダーを持つプリミティブメッシュレンダラーを作成します。 プリミティブメッシュレンダラーとコライダーを持つ GameObject
を返します。
使用法
var box = Utils.CreatePrimitive(PrimitiveType.Cube);
これは 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));
}
}
このクラスでは 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));
}
}
このクラスでは 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));
}
}
このクラスでは 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));
}
}
このクラスでは 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));
}
}
このクラスでは 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));
}
}
このクラスでは 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));
}
}
このクラスでは 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));
}
}
このクラスでは 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));
}
}