Hero image

Hướng dẫn cách chạy các bài kiểm tra tự động cho trò chơi của bạn bằng Unity Test Framework

Trang web này đã được dịch bằng máy để thuận tiện cho bạn. Chúng tôi không thể đảm bảo tính chính xác hoặc độ tin cậy của nội dung được dịch. Nếu bạn có thắc mắc về tính chính xác của nội dung được dịch, vui lòng tham khảo phiên bản tiếng Anh chính thức của trang web.

Trong quá trình phát triển game, việc kiểm thử thủ công có thể nhanh chóng trở nên lặp đi lặp lại và dễ xảy ra lỗi. Bạn đã bao giờ rơi vào những vòng lặp kiểm thử tưởng chừng như vô tận khi đang phát triển tính năng mới hoặc cố gắng sửa lỗi chưa?

Bằng cách tự động hóa việc kiểm thử mã, bạn có thể dành nhiều thời gian hơn cho việc phát triển trò chơi sáng tạo và ít thời gian hơn cho các nhiệm vụ kiểm thử chất lượng lặp đi lặp lại (nhưng quan trọng) nhằm đảm bảo rằng việc thêm, xóa hoặc thay đổi mã không làm hỏng dự án của bạn.

Unity giúp bạn tạo, quản lý và chạy các bài kiểm tra tự động cho trò chơi của mình với Unity Test Framework .

Kiểm thử theo hai cách trong Unity Test Framework

Unity Test Framework (UTF) cho phép bạn kiểm tra mã dự án của mình ở cả chế độ Chỉnh sửa và Chạy . Bạn cũng có thể nhắm mục tiêu mã kiểm thử cho nhiều nền tảng khác nhau như ứng dụng độc lập, iOS hoặc Android.

Bạn cài đặt UTF bằng cách thêm nó vào dự án của mình thông qua Trình quản lý gói .

Về mặt kỹ thuật, UTF tích hợp với NUnit , một thư viện kiểm thử mã nguồn mở nổi tiếng dành cho các ngôn ngữ .NET.

Có hai loại bài kiểm tra chính mà bạn có thể viết bằng UTF, chế độ chỉnh sửa và chế độ chạy:

Các bài kiểm tra ở chế độ chỉnh sửa chạy trong Unity Editor và có quyền truy cập vào cả mã Editor lẫn mã trò chơi. Điều này có nghĩa là bạn có thể kiểm tra các tiện ích mở rộng Trình chỉnh sửa tùy chỉnh của mình hoặc sử dụng các bài kiểm tra để sửa đổi cài đặt trong Trình chỉnh sửa và vào chế độ Phát, rất hữu ích để điều chỉnh các giá trị Trình kiểm tra và sau đó chạy các bài kiểm tra tự động với nhiều cài đặt khác nhau.

Chế độ kiểm thử trò chơi cho phép bạn kiểm tra mã trò chơi của mình trong quá trình thực thi. Các bài kiểm tra thường được chạy dưới dạng coroutine bằng cách sử dụng thuộc tính [UnityTest] . Điều này cho phép bạn kiểm tra mã có thể chạy trên nhiều khung hình. Theo mặc định, các bài kiểm tra ở chế độ Chơi sẽ chạy trong Trình chỉnh sửa, nhưng bạn cũng có thể chạy chúng trong bản dựng trình phát độc lập cho nhiều nền tảng mục tiêu khác nhau.

kiểm thử tự động

Gói điều khiển nhân vật góc nhìn thứ ba, có sẵn trên Unity Asset Store.

Cách kiểm thử Unity Test Framework

Để làm theo ví dụ này, bạn cần cài đặt gói Starter Assets – Third Person Character Controller từ Unity Asset Store và nhập nó vào một dự án mới.

kiểm thử tự động

Tệp manifest.json

Thiết lập Unity Test Framework

Cài đặt UTF thông qua Trình quản lý gói (Package Manager) của Windows . Tìm kiếm "Test Framework" trong Unity Registry ở Trình quản lý gói. Hãy chắc chắn chọn phiên bản 1.3.3 (phiên bản mới nhất tại thời điểm viết bài này).

Sau khi cài đặt UTF, hãy mở tệp Packages/manifest.json bằng trình soạn thảo văn bản và thêm phần testables sau phần dependencies, như sau:

,
"testables": [
"com.unity.inputsystem"
]

Lưu tập tin. Điều này sẽ hữu ích sau này, khi bạn cần tham chiếu đến assembly Unity.InputSystem.TestFramework để kiểm tra và mô phỏng đầu vào của người chơi.

Quay lại Trình chỉnh sửa và cho phép cài đặt phiên bản mới hơn.

kiểm thử tự động

Tham chiếu định nghĩa Assembly trong Trình kiểm tra cho Bộ điều khiển nhân vật góc nhìn thứ ba

Định nghĩa lắp ráp kiểm thử

Nhấp vào Window > General > Test Runner để xem cửa sổ chỉnh sửa Test Runner .

Trong phần hướng dẫn này, trọng tâm sẽ là tạo các bài kiểm tra ở chế độ Chơi. Thay vì sử dụng tùy chọn Tạo thư mục lắp ráp kiểm thử trong cửa sổ Test Runner , bạn sẽ tạo chúng bằng cửa sổ Dự án.

Khi thư mục gốc của thư mục Project Assets được chọn, hãy nhấp chuột phải và chọn Create > Testing > Tests Assembly Folder .

Một thư mục dự án Tests được thêm vào, chứa tệp Tests.asmdef (định nghĩa assembly). Điều này là cần thiết để các bài kiểm tra có thể tham chiếu đến các mô-đun và phần phụ thuộc của trò chơi.

Mã điều khiển nhân vật sẽ được tham chiếu trong các bài kiểm tra và cũng cần có định nghĩa hợp ngữ. Tiếp theo, bạn sẽ thiết lập một số định nghĩa và tham chiếu lắp ráp để tạo điều kiện thuận lợi cho việc kiểm thử giữa các mô-đun.

Nhấp chuột phải vào thư mục dự án Assets/StarterAssets/InputSystem và chọn Create > Assembly Definition . Hãy đặt tên sao cho dễ hiểu, ví dụ như StarterAssetsInputSystem .

Chọn tệp StarterAssetsInputSystem.asmdef mới và sử dụng Inspector để thêm tham chiếu định nghĩa Assembly tới Unity . Nhấp vào nút Áp dụng.

Nhấp chuột phải vào thư mục dự án Assets/StarterAssets/ThirdPersonController/Scripts và chọn Create > Assembly Definition . Hãy đặt tên sao cho dễ hiểu, ví dụ như ThirdPersonControllerMain .

Tương tự như với định nghĩa assembly trước đó, hãy mở ThirdPersonControllerMain trong Inspector và chọn tham chiếu cho:

- Unity.InputSystem

- StarterAssetsInputSystem

Nhấp vào Áp dụng .

kiểm thử tự động

Thêm tham chiếu vào định nghĩa lắp ráp

Thêm tham chiếu vào định nghĩa lắp ráp

Để mô phỏng một số phần của Input System, bạn cần tham chiếu đến nó trong các bài kiểm tra của mình. Ngoài ra, bạn cần tham chiếu đến không gian tên StarterAssets trong một assembly mà bạn sẽ tạo cho mã điều khiển nhân vật người thứ ba.

Mở tệp Tests.asmdef trong Inspector và thêm tham chiếu đến các định nghĩa assembly sau:

- UnityEngine.TestRunner

- UnityEditor.TestRunner

- Unity.InputSystem

- Unity.InputSystem.TestFramework

- ThirdPersonControllerMain

Nhấp vào nút Áp dụng.

Cửa sổ Cài đặt Bản dựng

Cửa sổ Cài đặt Bản dựng

Bài kiểm tra đầu tiên của bạn

Bài kiểm tra đầu tiên của bạn sẽ bao gồm một số kiến ​​thức cơ bản về cách tải và di chuyển nhân vật chính từ gói điều khiển góc nhìn thứ ba.

Hãy bắt đầu bằng cách thiết lập dự án mới với một khung cảnh môi trường thử nghiệm đơn giản và một tài nguyên Prefab nhân vật để làm việc.

Mở tệp cảnh có tên Assets/StarterAssets/ThirdPersonController/Scenes/Playground.unity và lưu một bản sao của nó bằng menu File > Save As vào đường dẫn mới này: Assets/Scenes/SimpleTesting.unity

Nếu bạn thấy các vật liệu màu hồng trong chế độ xem Trò chơi, hãy sử dụng Trình chuyển đổi đường dẫn kết xuất để nâng cấp vật liệu từ Đường dẫn kết xuất tích hợp sẵn lên Đường dẫn kết xuất phổ quát (URP). Xem bài viết này để có cái nhìn tổng quan nhanh chóng .

Tạo một thư mục mới trong thư mục Project Assets của bạn có tên là Resources . Ghi chú: Tên thư mục “Resources” rất quan trọng ở đây để cho phép sử dụng phương thức Unity Resources.Load() .

Kéo và thả GameObject PlayerArmature trong cửa sổ Scene vào thư mục Resources mới, và chọn tạo Original Prefab khi được hỏi. Đổi tên tài nguyên Prefab thành Character .

Đây sẽ là Prefab nhân vật cơ bản được sử dụng trong các bài kiểm tra của bạn từ nay trở đi.

Xóa đối tượng PlayerArmature GameObject khỏi cảnh SimpleTesting mới và lưu các thay đổi vào cảnh.

Bước cuối cùng trong thiết lập kiểm thử ban đầu, hãy vào File > Build Settings và chọn Add Open Scenes để thêm cảnh Scenes/SimpleTesting vào cài đặt biên dịch.

Tạo một kịch bản kiểm thử bằng C#

Chọn thư mục Tests trong thư mục Project Assets. Nhấp chuột phải và chọn Tạo > Kiểm thử > Tập lệnh kiểm thử C# .

Đặt tên cho kịch bản mới là CharacterTests . Mở đoạn mã trong IDE của bạn để xem xét kỹ hơn.

Hai đoạn mã mẫu được cung cấp kèm theo tập tin lớp ban đầu, nhằm minh họa một số kiến ​​thức cơ bản về kiểm thử.

Tiếp theo, bạn cần đảm bảo các bài kiểm tra tải một khung cảnh trò chơi "tập trung vào việc kiểm thử". Đây nên là một cảnh chứa những yếu tố tối thiểu cần thiết để kiểm tra hệ thống hoặc thành phần mà bạn đang tập trung vào.

Cập nhật lớp CharacterTests để thêm hai câu lệnh using mới và triển khai lớp InputTestFixture :

using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;

public class CharacterTests : InputTestFixture

Thêm hai trường riêng tư vào đầu lớp CharacterTests:

GameObject character = Resources.Load("Character");
Bàn phím;

Trường ký tự sẽ lưu trữ tham chiếu đến Character Prefab, được tải từ thư mục Resources. Biến Keyboard sẽ lưu giữ tham chiếu đến thiết bị nhập liệu Keyboard do InputSystem cung cấp.

Ghi đè phương thức Setup() của lớp InputTestFixture cơ bản bằng cách cung cấp phương thức của riêng bạn trong lớp CharacterTests:

public override void Setup()
{
SceneManager.LoadScene("Scenes/SimpleTesting");
base.Setup();
keyboard = InputSystem.AddDevice();

var mouse = InputSystem.AddDevice();
Press(mouse.rightButton);
Release(mouse.rightButton);;
}

Phương thức Setup() chạy phương thức Setup() của lớp cơ sở và sau đó thiết lập lớp CharacterTests của riêng bạn bằng cách tải cảnh kiểm thử và khởi tạo thiết bị nhập bàn phím.

Chức năng nhập liệu bằng chuột được thêm vào chỉ để Bộ điều khiển góc nhìn thứ ba bắt đầu nhận tín hiệu từ thiết bị bàn phím ảo/mô phỏng. Thao tác này gần giống như thao tác 'thiết lập tiêu điểm'.

Trong bài kiểm tra đầu tiên, bạn sẽ tạo một thể hiện của nhân vật từ Prefab và khẳng định rằng nó không phải là null. Thêm phương thức sau vào lớp kiểm thử của bạn:

[Test]
public void TestPlayerInstantiation()
{
GameObject characterInstance = GameObject.Instantiate(character, Vector3.zero, Quaternion.identity);
Assert.That(characterInstance, !Is.Null);
}

Trong lúc đó, bạn cũng nên chỉnh sửa lại các phương pháp kiểm thử mẫu. Xóa các phương thức CharacterTestsSimplePasses và CharacterTestsWithEnumeratorPasses .

[UnityTest]
public IEnumerator TestPlayerMoves()
{
    GameObject characterInstance = GameObject.Instantiate(character, Vector3.zero, Quaternion.identity);

    Press(keyboard.upArrowKey);
    yield return new WaitForSeconds(1f);
    Thả (phím mũi tên lên bàn phím);
    yield return new WaitForSeconds(1f);

    Assert.That(characterInstance.transform.GetChild(0).transform.position.z, Is.GreaterThan(1.5f));
}
Kiểm tra thành công

Dấu tích màu xanh lá cây biểu thị rằng bài kiểm tra đã được hoàn thành thành công.

Vượt qua bài kiểm tra đầu tiên của bạn

Lưu kịch bản và quay lại cửa sổ Test Runner trong Trình chỉnh sửa. Chọn bài kiểm tra TestPlayerInstantiation và nhấp vào Chạy các bài đã chọn .

Dấu tích màu xanh lá cây biểu thị bài kiểm tra đã đạt. Bạn đã khẳng định rằng nhân vật có thể được tải từ tài nguyên, được khởi tạo trong cảnh thử nghiệm và không phải là null tại thời điểm đó.

Có thể bạn đã nhận thấy rằng chú thích [Test] được sử dụng cho bài kiểm tra này thay vì chú thích [UnityTest] . Thuộc tính UnityTest cho phép các coroutine chạy thử nghiệm trên nhiều khung hình. Trong trường hợp này, bạn chỉ cần khởi tạo đối tượng nhân vật và xác nhận rằng nó đã được tải.

Thông thường, bạn nên sử dụng thuộc tính NUnit Test thay vì thuộc tính UnityTest trong chế độ Chỉnh sửa, trừ khi bạn cần đưa ra các chỉ dẫn đặc biệt, cần bỏ qua một khung hình hoặc chờ một khoảng thời gian nhất định trong chế độ Chơi.

Thử nghiệm chuyển động nhân vật trong chế độ Chơi

Thử nghiệm chuyển động nhân vật trong chế độ Chơi

Kiểm tra chuyển động nhân vật

Tiếp theo, bạn sẽ sử dụng UnityTest để khẳng định rằng việc giữ phím điều khiển tiến lên sẽ di chuyển nhân vật về phía trước.

Thêm phương thức kiểm thử mới được cung cấp bên dưới vào lớp CharacterTests của bạn.

Hai phương thức hỗ trợ kiểm thử mới đã xuất hiện: Press() và Release(). Cả hai chức năng này đều được cung cấp bởi lớp cơ sở InputTestFixture và giúp bạn mô phỏng thao tác nhấn và nhả phím điều khiển của InputSystem.

Phương thức TestPlayerMoves() thực hiện các thao tác sau:

Khởi tạo một thể hiện của nhân vật từ Prefab nhân vật tại vị trí (X: 0, Y: 0, Z: 0)

Nhấn giữ phím mũi tên lên trên bàn phím ảo trong 1 giây, sau đó thả ra.

Chờ thêm 1 giây (để nhân vật chậm lại và dừng di chuyển)

Khẳng định rằng nhân vật đã di chuyển đến vị trí trên trục Z lớn hơn 1,5 đơn vị.

Lưu tập tin, quay lại Test Runner và chạy bài kiểm tra mới.

[UnityTest]
public IEnumerator TestPlayerMoves()
{
    GameObject characterInstance = GameObject.Instantiate(character, Vector3.zero, Quaternion.identity);

    Press(keyboard.upArrowKey);
    yield return new WaitForSeconds(1f);
    Thả (phím mũi tên lên bàn phím);
    yield return new WaitForSeconds(1f);

    Assert.That(characterInstance.transform.GetChild(0).transform.position.z, Is.GreaterThan(1.5f));
}
Kịch bản Sức khỏe Người chơi

Kịch bản Sức khỏe Người chơi

Kiểm tra thiệt hại do rơi

Tiếp theo, bạn sẽ kiểm tra một kịch bản Monobehaviour tùy chỉnh bằng cách thêm một thành phần Sức khỏe Người chơi đơn giản.

Tạo một tập lệnh mới trong Assets/StarterAssets/ThirdPersonController/Scripts. Đặt tên cho nó PlayerHealth.

Mở tập lệnh trong IDE của bạn và thay thế nội dung bằng đoạn mã được cung cấp bên dưới.

Có rất nhiều đoạn mã mới được thêm vào đây. Tóm lại, đoạn mã này sẽ xác định xem nhân vật người chơi có đang trong trạng thái rơi hay không. Nếu nhân vật chạm đất một lần trong trạng thái rơi, máu của nhân vật sẽ giảm 10%.

Tìm đối tượng Character Prefab bên dưới Tài sản/Nguồn lực. Mở Prefab và thêm thành phần script PlayerHealth mới.

Tiếp theo, bạn sẽ sử dụng cảnh thử nghiệm để khẳng định rằng sức khỏe của người chơi giảm sau khi rơi khỏi gờ đá.

Sử dụng thuộc tính [UnityTest], bạn có thể viết một bài kiểm tra ở chế độ Chơi để kiểm tra thiệt hại do rơi. Khi rơi trong thời gian hơn 0,2 giây, người chơi sẽ chịu sát thương 0,1f (tương đương 10% lượng máu tối đa).

Trong SimpleTesting Trong cảnh này, bạn sẽ thấy một cầu thang dẫn lên một gờ đá. Đây là một nền tảng thử nghiệm để tạo ra nhân vật và kiểm tra. PlayerHealth kịch bản.

Mở CharacterTests.cs một lần nữa và thêm một phương thức kiểm thử mới có tên là TestPlayerFallDamage:

[UnityTest]
công khai IEnumerator TestPlayerFallDamage()
{
// Tạo nhân vật ở vị trí đủ cao trong cảnh thử nghiệm
GameObject characterInstance = GameObject.Instantiate(character, new Vector3(0f, 4f, 17.2f), Quaternion.identity);

// Lấy tham chiếu đến thành phần PlayerHealth và xác nhận hiện đang ở trạng thái sức khỏe đầy đủ (1f)
var characterHealth = characterInstance.GetComponent<PlayerHealth> ();
Assert.That(characterHealth.Health, Is.EqualTo(1f));

// Bước ra khỏi mép vực và chờ cú rơi
Press(keyboard.upArrowKey);
yield return new WaitForSeconds(0.5f);
Thả (phím mũi tên lên bàn phím);
yield return new WaitForSeconds(2f);

// Khẳng định rằng đã mất 1 điểm máu do sát thương khi rơi
Assert.That(characterHealth.Health, Is.EqualTo(0.9f));
}

Bạn cũng cần thêm một sử dụng Tham chiếu đến không gian tên StarterAssets ở đầu tệp lớp:

Sử dụng StarterAssets;

Bài kiểm tra trên tuân theo quy trình điển hình. sắp xếp, hành động, khẳng định (mô hình AAA)Thường thấy trong quá trình thử nghiệm:

  • Cái Sắp xếp Phần này của phương thức kiểm thử đơn vị khởi tạo các đối tượng và thiết lập giá trị của dữ liệu được truyền cho phương thức cần kiểm thử.
  • Cái Hành động Phần này gọi phương thức cần kiểm thử với các tham số đã được thiết lập. Trong trường hợp này, việc gọi phương thức cần kiểm thử được xử lý bởi tương tác vật lý khi người chơi chạm đất sau khi rơi.

Cái Khẳng định Phần này xác minh rằng hoạt động của phương thức đang được kiểm thử diễn ra như mong đợi.

Tiếp theo, bạn sẽ kiểm tra một kịch bản Monobehaviour tùy chỉnh bằng cách thêm một thành phần Sức khỏe Người chơi đơn giản.

Tạo một tập lệnh mới trong thư mục Assets/StarterAssets/ThirdPersonController/Scripts . Đặt tên nó là PlayerHealth .

Mở tập lệnh trong IDE của bạn và thay thế nội dung bằng đoạn mã được cung cấp bên dưới.

Có rất nhiều đoạn mã mới được thêm vào đây. Tóm lại, đoạn mã này sẽ xác định xem nhân vật người chơi có đang trong trạng thái rơi hay không. Nếu nhân vật chạm đất một lần trong trạng thái rơi, máu của nhân vật sẽ giảm 10%.

Tìm đối tượng Character Prefab trong thư mục Assets/Resources . Mở Prefab và thêm thành phần script PlayerHealth mới.

Tiếp theo, bạn sẽ sử dụng cảnh thử nghiệm để khẳng định rằng sức khỏe của người chơi giảm sau khi rơi khỏi gờ đá.

Sử dụng thuộc tính [UnityTest], bạn có thể viết một bài kiểm tra ở chế độ Chơi để kiểm tra thiệt hại do rơi. Khi rơi trong thời gian hơn 0,2 giây, người chơi sẽ chịu sát thương 0,1f (tương đương 10% lượng máu tối đa).

Trong khung cảnh SimpleTesting , bạn sẽ thấy một cầu thang dẫn lên một gờ đá. Đây là một nền tảng thử nghiệm để tạo ra nhân vật và kiểm tra kịch bản PlayerHealth .

Mở lại file CharacterTests.cs và thêm một phương thức kiểm thử mới có tên là TestPlayerFallDamage:

[UnityTest]
public IEnumerator TestPlayerFallDamage()
{
// Tạo nhân vật ở vị trí đủ cao trong cảnh thử nghiệm
GameObject characterInstance = GameObject.Instantiate(character, new Vector3(0f, 4f, 17.2f), Quaternion.identity);

// Lấy tham chiếu đến thành phần PlayerHealth và xác nhận hiện đang ở trạng thái sức khỏe đầy đủ (1f)
var characterHealth = characterInstance.GetComponent();
Assert.That(characterHealth.Health, Is.EqualTo(1f));

// Bước ra khỏi mép vực và chờ cú rơi
Press(keyboard.upArrowKey);
yield return new WaitForSeconds(0.5f);
Release(keyboard.upArrowKey);
yield return new WaitForSeconds(2f);

// Khẳng định rằng đã mất 1 điểm máu do sát thương khi rơi
Assert.That(characterHealth.Health, Is.EqualTo(0.9f));
}

Bạn cũng cần thêm một tham chiếu `using` đến không gian tên `StarterAssets` ở đầu tệp lớp:

Sử dụng StarterAssets;

Bài kiểm tra trên tuân theo mô hình sắp xếp, thực hiện, khẳng định (AAA) điển hình , thường thấy trong kiểm thử:

Phần Arrange của phương thức kiểm thử đơn vị khởi tạo các đối tượng và thiết lập giá trị của dữ liệu được truyền vào phương thức cần kiểm thử.

Phần Act gọi phương thức đang được kiểm thử với các tham số đã được thiết lập. Trong trường hợp này, việc gọi phương thức cần kiểm thử được xử lý bởi tương tác vật lý khi người chơi chạm đất sau khi rơi.

Phần Assert xác nhận rằng hoạt động của phương thức đang được kiểm thử diễn ra như mong đợi.

Sử dụng UnityEngine;

không gian tên StarterAssets
{
    [RequireComponent(typeof(CharacterController))]
    public class PlayerHealth : MonoBehaviour
    {
        [Tiêu đề ("Cài đặt Sức khỏe Người chơi và Sát thương khi Rơi")]
        [Range(0.1f, 1f)]
        [Chú thích("Lượng máu ban đầu của nhân vật.")]
        public float StartingHealth = 1.0f;

        [Range(0.1f, 1f)]
        [Space(3f)]
        [Chú thích("Lượng máu ban đầu của nhân vật.")]
        public float FallDamageTimeThreshold = 0.2f;

        // người chơi
        [SerializeField]
        private float _fallingThreshold;
        private CharacterController _controller;

        [SerializeField]
        private float _currentHealth;
        private boolean _isFalling;

        float công cộng Y tế
        {
            get { return _currentHealth; }
            set { _currentHealth = value; }
        }

        private void Awake()
        {
            _controller = GetComponent();
            _fallingThreshold = FallDamageTimeThreshold;
            _currentHealth = StartingHealth;
        }

        private void Update()
        {
            if (!_controller.isGrounded)
            {
                _fallingThreshold -= Time.deltaTime;
            }
            else
            {
                _fallingThreshold = FallDamageTimeThreshold;
                if (_isFalling)
                {
                    _isFalling = false;
                    _currentHealth -= 0.1f;
                }
            }
            if (_fallingThreshold <= 0f)
            {
                _isFalling = true;
            }
        }
    }
}
Test Runner - chạy các bài kiểm tra

Một bài kiểm tra để đảm bảo rằng nhân vật ngã trong trò chơi đúng như dự định, bao gồm cả việc chịu đúng lượng sát thương.

Đang chạy bài kiểm tra mới

Quay lại trình soạn thảo, chạy thử nghiệm mới. Khi chơi ở chế độ Play, bạn sẽ thấy nhân vật bước ra khỏi mép vực, rơi xuống (vượt quá ngưỡng 0,2 giây để được coi là rơi), và chịu sát thương sau khi chạm đất.

Các bài kiểm tra không chỉ phục vụ mục đích kiểm tra xem các thay đổi mã có làm hỏng chức năng hay không, mà chúng còn có thể đóng vai trò như tài liệu hoặc gợi ý giúp các nhà phát triển suy nghĩ về các khía cạnh khác của trò chơi khi điều chỉnh cài đặt.

Cách chuyển đổi quá trình kiểm thử để chạy trong bản dựng trình phát độc lập

Cách chuyển đổi quá trình kiểm thử để chạy trong bản dựng trình phát độc lập

Chạy thử nghiệm trong trình phát độc lập

Như đã đề cập trước đó, khi chạy các bài kiểm tra ở chế độ Play trong Test Runner , theo mặc định chúng sẽ chạy ở chế độ Play bằng Unity Editor. Bạn cũng có thể thay đổi để chúng chạy dưới dạng trình phát độc lập.

Sử dụng tùy chọn thả xuống Vị trí chạy trong cửa sổ Test Runner để chuyển các bài kiểm tra sang chạy trong các bản dựng trình phát Độc lập.

Tự động hóa và CI

Sau khi bắt đầu xây dựng bộ kiểm thử, bước tiếp theo là chạy chúng tự động sau khi quá trình biên dịch hoàn tất. Các bài kiểm tra đơn vị và tích hợp tự động chạy sau khi biên dịch rất hữu ích để phát hiện các lỗi hoặc sự cố càng sớm càng tốt. Chúng cũng có thể hoạt động như một phần của hệ thống xây dựng tự động từ xa trên nền tảng đám mây .

Tách biệt quá trình xây dựng và chạy.

Thông thường, bạn sẽ muốn ghi lại kết quả chạy thử nghiệm ở định dạng tùy chỉnh để có thể chia sẻ kết quả với nhiều người hơn. Để thu thập kết quả kiểm thử bên ngoài Unity Editor, bạn cần tách riêng quá trình biên dịch và chạy.

Tạo một tập lệnh mới trong thư mục dự án Tests của bạn có tên là SetupPlaymodeTestPlayer .

Lớp SetupPlaymodeTestPlayer sẽ triển khai giao diện ITestPlayerBuildModifier. Bạn sẽ sử dụng điều này để ghi đè và "kết nối" vào phương thức ModifyOptions, phương thức này nhận các tùy chọn người chơi của bản dựng và cho phép bạn sửa đổi chúng.

sử dụng System.IO;
Sử dụng UnityEditor;
using UnityEditor.TestTools;

[cuộc họp: TestPlayerBuildModifier(typeof(SetupPlaymodeTestPlayer))]
public class SetupPlaymodeTestPlayer : ITestPlayerBuildModifier
{
public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions)
{
playerOptions.options &= ~(BuildOptions.AutoRunPlayer | BuildOptions.ConnectToHost);

var buildLocation = Path.GetFullPath("TestPlayers");
var fileName = Path.GetFileName(playerOptions.locationPathName);
if (!string.IsNullOrEmpty(fileName))
buildLocation = Path.Combine(buildLocation, fileName);
playerOptions.locationPathName = buildLocation;

Trả về playerOptions;
}
}

Tập lệnh sửa đổi Player Build tùy chỉnh này thực hiện các thao tác sau khi chạy thử nghiệm ở chế độ Chơi (Vị trí chạy: (Trên trình phát):

Vô hiệu hóa tính năng tự động chạy cho các trình phát đã được xây dựng và bỏ qua tùy chọn trình phát cố gắng kết nối với máy chủ mà nó đang chạy.

Thay đổi vị trí đường dẫn xây dựng thành một đường dẫn chuyên dụng trong dự án ( TestPlayers )

Sau khi hoàn tất bước này, bạn có thể mong đợi các bản dựng sẽ được lưu trong thư mục TestPlayers mỗi khi quá trình xây dựng hoàn tất. Như vậy là quá trình chỉnh sửa bản dựng đã hoàn tất và ngắt kết nối giữa quá trình biên dịch và chạy.

Tiếp theo, bạn sẽ triển khai chức năng báo cáo kết quả. Điều này cho phép bạn ghi kết quả kiểm tra vào một vị trí tùy chỉnh, sẵn sàng cho việc tạo và công bố báo cáo tự động.

Tạo một tập lệnh mới trong thư mục dự án Tests của bạn có tên là ResultSerializer (được cung cấp bên dưới). Lớp này sẽ sử dụng tham chiếu đến thư viện TestRunCallback và triển khai giao diện ITestRunCallback.

triển khai ITestRunCallback này bao gồm một phương thức RunFinished tùy chỉnh, phương thức này thiết lập bản dựng trình phát với các bài kiểm tra để ghi kết quả kiểm tra vào một tệp XML có tên testresults.xml .

Sử dụng NUnit.Framework.Interfaces;
sử dụng System.IO;
sử dụng System.Xml;
Sử dụng UnityEngine;
using UnityEngine.TestRunner;

[assembly:TestRunCallback(typeof(ResultSerializer))]
public class ResultSerializer : ITestRunCallback
{
    public void RunStarted(ITest testsToRun) { }
    public void TestFinished(ITestResult result) { }
    public void TestStarted(ITest test) { }

    public void RunFinished(ITestResult testResults)
    {
        var path = Path.Combine(Application.persistentDataPath, "testresults.xml");
        using (var xmlWriter = XmlWriter.Create(path, new XmlWriterSettings { Indent = true }))
            testResults.ToXml(true).WriteTo(xmlWriter);

        System.Console.WriteLine($"\n Kết quả kiểm tra được ghi vào: {path}\n");
        Application.Quit(testResults.FailCount > 0 ? 1 : 0);
    }
}
Mã số

Kết quả đầu ra có thể được tìm thấy trong tệp testresults.xml nằm trong thư mục Application.persistentDataPath của nền tảng của bạn.

Chạy thử nghiệm sau khi tách quá trình xây dựng và chạy.

Với việc kết hợp SetupPlaymodeTestPlayer.cs và ResultSerializer.cs , quá trình biên dịch và chạy giờ đây đã được tách biệt. Việc chạy thử nghiệm sẽ xuất kết quả ra tệp testresults.xml nằm trong thư mục Application.persistentDataPath của nền tảng trình phát.

Để sử dụng một số kiểu dữ liệu trong các lớp hook này, bạn cần thêm một tham chiếu bổ sung đến Tests.asmdef . Cập nhật để thêm tham chiếu định nghĩa assembly UnityEditor.UI.EditorTests.

Việc chạy các bài kiểm tra trong trình phát sẽ tạo ra một bản dựng trình phát nằm trong thư mục TestPlayers của dự án và một tệp testresults.xml trong vị trí Application.persistentDataPath.

Ảnh bìa sách điện tử

Thêm tài liệu tham khảo về kiểm thử trong Unity

Khóa học Unity Test Framework

Gói Test Framework bao gồm một khóa học kiểm thử với các bài tập mẫu giúp bạn tìm hiểu thêm về kiểm thử với Unity. Hãy nhớ tải các tệp dự án cho khóa học bằng Trình quản lý gói.

Sử dụng Trình quản lý gói > Gói dịch vụ: Unity Registry > Test Framework , tìm danh sách thả xuống Samples và nhập các bài tập của khóa học.

Các bài tập sẽ được nhập vào dự án của bạn và nằm trong thư mục Assets/Samples/ Test Framework . Mỗi bài mẫu đều bao gồm một thư mục bài tập để bạn làm việc, cũng như một đáp án để bạn so sánh bài làm của mình trong quá trình làm bài.

Kiểm thử mã của bạn với UTF

Bài thuyết trình về UTF tại hội Unite Copenhagen này đi sâu hơn vào chi tiết và đưa ra một số trường hợp sử dụng thú vị khác cho việc tùy chỉnh kiểm thử. Hãy nhớ xem qua để biết thêm những khả năng khác nhé.

Gỡ lỗi trong Unity

Tăng tốc quy trình gỡ lỗi trong Unity với các bài viết về:

- Microsoft Visual Studio 2022

- Microsoft Visual Studio Code

Sách điện tử kỹ thuật nâng cao

Unity cung cấp một số hướng dẫn nâng cao để giúp các nhà phát triển chuyên nghiệp tối ưu hóa mã trò chơi. Tạo một bộ quy tắc viết mã C#: Viết mã sạch hơn, có khả năng mở rộng. Tổng hợp các lời khuyên từ các chuyên gia trong ngành về cách tạo hướng dẫn phong cách mã hóa để giúp nhóm của bạn phát triển một cơ sở mã sạch, dễ đọc và có khả năng mở rộng.

Một hướng dẫn phổ biến khác với người dùng của chúng tôi là hơn 70 mẹo để tăng năng suất khi sử Unity . Nó chứa đầy những mẹo tiết kiệm thời gian để cải thiện quy trình làm việc tổng hợp hàng ngày của bạn với Unity 2020 LTS, bao gồm cả những mẹo mà ngay cả các nhà phát triển giàu kinh nghiệm cũng có thể bỏ sót.

Tài liệu

Khám phá sâu hơn API TestRunner mới nhất, tìm hiểu về các thuộc tính tùy chỉnh UTF khác và khám phá thêm các vòng đời cần can thiệp thông qua tài liệu UTF.

Bạn có thể tìm thấy tất cả các sách điện tử và bài viết nâng cao của Unity tại trung tâm hướng dẫn thực hành tốt nhất Unity .