Unity 테스트 러너에는 부동 소수점 값과 Vector2
, Vector4
등과 같은 일부 비프리미티브 오브젝트를 비교하기 위해 NUnit
제약과 함께 사용할 수 있는 유틸리티가 포함되어 있습니다. 이러한 클래스는 UnityEngine.TestTools.Utils
네임스페이스에 배치됩니다.
유틸리티 함수를 포함하는 클래스입니다.
서명 public static bool AreFloatsEqual(float expected, float actual, float allowedRelativeError)
설명 이 메서드는 두 부동 소수점 숫자의 상대 엡실론 비교를 수행하여 두 숫자가 같은지 확인하고, 상대 오차를 세 번째 파라미터로 사용합니다. 상대 오차는 절대 오차를 정확한 값의 크기로 나눈 것입니다.
사용법
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)
설명 이 메서드는 두 부동 소수점 숫자를 비교하여 특정 허용치에서 두 숫자가 같은지 확인합니다.
사용법
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
제약과 함께 사용할 수 있습니다. 이 비교자는 내부적으로 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));
//Default allowed relative error 0.0001f
var actual = -0.01f;
var expected = 0.001f
Assert.That(actual, Is.EqualTo(expected).Using(FloatEqualityComparer.Instance));
}
}
이 클래스를 NUnit
제약과 함께 사용하여 두 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()
{
//Allowed error 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));
//Using default error
firstColor = new Color(0f, 0f, 0f, 0f);
secondColor = new Color(0f, 0f, 0f, 0f);
Assert.That(firstColor, Is.EqualTo(secondColor).Using(ColorEqualityComparer.Instance));
}
}
이 클래스를 NUnit
제약과 함께 사용하여 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
제약과 함께 사용하여 두 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()
{
//Custom error
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));
//Default error 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
제약과 함께 사용하여 두 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()
{
//Custom error 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));
//Default error 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
제약과 함께 사용하여 두 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()
{
//Custom error 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));
//Default error 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
제약과 함께 사용하여 두 UnityEngine.Vector2
오브젝트를 비교해서 두 오브젝트가 같은지 확인할 수 있습니다. 이 클래스는 System.Collections.Generic.IEqualityComparer<Vector2>
인터페이스를 구현합니다. 오버로드 operator==
of UnityEngine.Vector2
를 사용하여 두 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
제약과 함께 사용하여 두 UnityEngine.Vector3
오브젝트를 비교해서 두 오브젝트가 같은지 확인할 수 있습니다. 이 클래스는 System.Collections.Generic.IEqualityComparer<Vector3>
인터페이스를 구현합니다. 오버로드 operator==
of UnityEngine.Vector3
를 사용하여 두 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
제약과 함께 사용하여 두 UnityEngine.Vector4
오브젝트를 비교해서 두 오브젝트가 같은지 확인할 수 있습니다. 이 클래스는 System.Collections.Generic.IEqualityComparer<Vector4>
인터페이스를 구현합니다. 오버로드 operator==
of UnityEngine.Vector4
를 사용하여 두 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));
}
}