单元测试UI元素

3
让我先说一下,我是新手单元测试,这是我第一次尝试这样做。
我正在开发一个应用程序,用户可以向画布添加元素,选择它们,移动它们等等。在每个选定的元素上,我都添加了一个修饰器。当控件取消选择时,修饰器将被移除。
我有一个方法,接收一个UIElement并移除Adorner,这就是我要测试的方法。
我使用的方法来移除修饰器是:
public static void ClearElementAdorners(UIElement element)
{
    IEnumerable<Adorner> a = AdornerLayer.GetAdornerLayer(element).GetAdorners(element).AsEnumerable<Adorner>();
    if (a != null)
    {
        a.ToList().ForEach((p) =>
        {
            AdornerLayer.GetAdornerLayer(element).Remove(p);
        });
    }
}

我使用的测试方法如下。
[TestMethod]
public void ClearElementAdornersUnitTesting()
{

    Button el = new Button();
    Button el2 = new Button();
    TestingWindow t = new TestingWindow();
    t.Show();

    t.TestingCanvas.Children.Add(el);
    t.TestingCanvas.Children.Add(el2);

    AdornerLayer alayer = AdornerLayer.GetAdornerLayer(el2);
    alayer.Add(new ClassLibrary.EditModeAdornerLayer(el2));

    ClassLibrary.AdornerOperations.ClearElementAdorners(el2);
    Assert.AreEqual(el, el2);
}

我在创建两个按钮。其中一个获得了装饰器,而另一个则作为测试控件保持不变。我从元素中删除了装饰器,并在最后检查它们是否相等。我已经调试了删除装饰器的方法,我知道它是有效的。但我不知道如何测试它。Assert.AreEqual总是失败并显示以下错误。

{"Assert.AreEqual failed. Expected:<System.Windows.Controls.Button>. Actual:<System.Windows.Controls.Button>. "}

我可能会有所错误,但是如何运行此测试?如果需要更多信息,我将很乐意提供。

谢谢

正确的方法是:

Adorner[] adorner = AdornerLayer.GetAdornerLayer(el2).GetAdorners(el2); 
Assert.IsNull(adorner);

成为烦恼的来源:这不是一个单元测试。由于涉及大量事项来启动此类测试,它更像是一个集成测试。 - meilke
1个回答

2
虽然不同,但在最后你测试它们的时候却是一样的。第一个与此无关。去掉它,只需测试装饰层是否为空即可。

我猜我可以这样做:Adorner[] adorner = AdornerLayer.GetAdornerLayer(el2).GetAdorners(el2); Assert.IsNull(adorner); - Jorge Chibante
你正在清除图层,这正是你应该测试的内容。另一个按钮根本不必要。 - meilke
是的,那很有道理。我之前发布的代码可以运行并且测试通过了。感谢你的帮助。 - Jorge Chibante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接