代码之家  ›  专栏  ›  技术社区  ›  Jorge Chibante

单元测试UI元素

  •  3
  • Jorge Chibante  · 技术社区  · 12 年前

    让我首先说,我是单元测试的新手,这实际上是我第一次尝试这样做。

    我正在开发一个应用程序,用户可以在其中向 Canvas ,选择它们,移动它们,依此类推。在每个选定的元素上,我添加一个 Adorner 。当取消选择控件时,装饰器将被删除。

    我有一个方法,它接收 UIElement 并删除 阿多诺 这就是我正在测试的方法。

    我用来删除装饰器的方法是:

    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);
    
    1 回复  |  直到 12 年前
        1
  •  2
  •   meilke    12 年前

    按钮不一样,但最后你正在测试,就好像它们是一样的。第一个按钮与它无关。删除它,然后测试装饰层是否为空。