UI -Toolkit in Einheit Auslöser Click -Ereignis während der Spielmodus -Unit -Tests nicht auszulösenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 UI -Toolkit in Einheit Auslöser Click -Ereignis während der Spielmodus -Unit -Tests nicht auszulösen

Post by Anonymous »

Problem : Ich habe ein einfaches Menüsystem mit Uitoolkit in Einheit erstellt. Im Wesentlichen nur eine Startknopf, die beim Drücken von Navigates zu einer neuen Szene. Wenn ich die Testszene habe, funktioniert alles einwandfrei, aber als ich versuchte, einen entsprechenden Spielmodus -Unit -Test zu implementieren, registriert der Test meine Uitoolkit -Taste nicht als geklickt.

Code: Select all

[UnityTest]
public IEnumerator TestButtonClick()
{
bool clicked = false;
startButton.clicked += () =>
{
clicked = true;
Debug.Log("Button clicked!"); // Debug to check if the click event fires
};

startButton.SetEnabled(true);
startButton.style.display = DisplayStyle.Flex;

var pickingMode = startButton.pickingMode;
Debug.Log($"Button picking mode: {pickingMode}");

var displayStyle = startButton.resolvedStyle.display;
Debug.Log($"Button display style: {displayStyle}");

yield return null;

var root = startButton.hierarchy.parent;
if (root != null)
{
Debug.Log($"Button's parent is: {root}");
}
else
{
Debug.LogError("The button has no parent in the hierarchy.");
}

Debug.Log($"Button is interactable: {startButton.enabledSelf}");

// Simulate PointerDownEvent
using (var pointerDownEvent = new PointerDownEvent())
{
pointerDownEvent.target = startButton;  // Ensure the event is targeted to the correct button
startButton.SendEvent(pointerDownEvent);

// Log to check if the event was received
Debug.Log($"PointerDownEvent target: {pointerDownEvent.target}");

Assert.IsFalse(pointerDownEvent.isPropagationStopped, "PointerDownEvent propagation was stopped unexpectedly.");
}
yield return new WaitForSeconds(0.1f); // Small delay between down and up event

// Simulate PointerUpEvent
using (var pointerUpEvent = new PointerUpEvent())
{
pointerUpEvent.target = startButton;  // Ensure the event is targeted to the correct button
startButton.SendEvent(pointerUpEvent);

// Log to check if the event was received
Debug.Log($"PointerUpEvent target: {pointerUpEvent.target}");

Assert.IsFalse(pointerUpEvent.isPropagationStopped, "PointerUpEvent propagation was stopped unexpectedly.");
}

yield return null;
// Assert that the button click event was triggered
if (!clicked)
{
Debug.LogError("The button click event was not triggered.");
}

// Assert that the button click event was triggered

Assert.IsTrue(clicked, "The button click event was not triggered.");
}
Protokolle

Code: Select all

TestButtonClick (0.201s)
---
Unhandled log message: '[Error] The button click event was not triggered.'.  Use UnityEngine.TestTools.LogAssert.Expect
---
UI_tests/d__6:MoveNext () (at Assets/Tests/UI_tests.cs:121)
UnityEngine.SetupCoroutine:InvokeMoveNext (System.Collections.IEnumerator,intptr)

---
Button picking mode: Position
Button display style: Flex
Button's parent is: VisualElement Buttons (x:0.00, y:0.00, width:NaN, height:NaN) world rect: (x:0.00, y:0.00, width:NaN, height:NaN)
Button is interactable: True
PointerDownEvent target: Button Play (x:0.00, y:0.00, width:NaN, height:NaN) world rect: (x:0.00, y:0.00, width:NaN, height:NaN)
PointerUpEvent target: Button Play (x:0.00, y:0.00, width:NaN, height:NaN) world rect: (x:0.00, y:0.00, width:NaN, height:NaN)
The button click event was not triggered.
.uxml

Code: Select all











update
Wenn ich zusammen mit einer Taste ein Uidokument erstelle, kann ich überprüfen, ob ich geklickt habe. Wenn ich jedoch versuchte, mein VisualTree -Element zu laden, erscheint es, als mein UI nicht geladen wird. benutzerdefinierte Menü.uxml. Ich verstehe nicht, warum mein testclick2 () einwandfrei funktioniert, aber mein testclick3 () fällt PlayMode -Tests nicht. < /P>

Code: Select all

    [UnityTest]
public IEnumerator TestClick2()
{

bool wasClicked = false;
Button btn = new Button { name = "foobar" };
btn.RegisterCallback(_ => wasClicked = true);
GameObject hostGameObject = new GameObject();
UIDocument uiDoc = hostGameObject.AddComponent();
uiDoc.panelSettings = ScriptableObject.CreateInstance();
uiDoc.rootVisualElement.Add(btn);
yield return null;

using (ClickEvent clkEvt = ClickEvent.GetPooled())
{
clkEvt.target = btn;
btn.SendEvent(clkEvt);
}

Assert.IsTrue(wasClicked);

}
[UnityTest]
public IEnumerator TestClick3()
{
var uiDocument = new GameObject().AddComponent();
// Load your specific UXML file
var visualTree = Resources.Load("Menu");
if (visualTree != null)
{
uiDocument.
visualTreeAsset = visualTree;
}
if (visualTree == null)
{
Debug.LogError("Visual Tree is null. Could nor load from resources");
}

yield return null;

root = uiDocument.rootVisualElement;

yield return null;

startButton = root.Q("Play");
if (startButton == null)
{
Debug.LogError("Play button was not found.");
}
Debug.Log("startButton is: " + startButton);
Assert.NotNull(startButton, "start button null");

bool wasClicked = false;

startButton.SetEnabled(true);
startButton.style.display = DisplayStyle.Flex;

startButton.RegisterCallback(_ => wasClicked = true);
yield return null;

using (ClickEvent clkEvt = ClickEvent.GetPooled())
{
clkEvt.target = startButton;
startButton.SendEvent(clkEvt);
}

Assert.IsTrue(wasClicked);

}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post