【问题标题】:evenhandler not getting called when executed from UnitTest Code in WP7从 WP7 中的单元测试代码执行时未调用事件处理程序
【发布时间】:2011-10-08 19:34:44
【问题描述】:

我正在 WP7 中为我的一个应用程序进行单元测试。我想检查 button_click 功能是否正常工作。当我尝试从我的单元测试代码中调用 button_click 函数时 如下所示

        CheckUrVacabolary.MainPage cpage = new CheckUrVacabolary.MainPage();
        cpage.txtFind.Text = "home";
        cpage.butMeaning_Click(cpage,null);

但是 button_click(OnDefineInDictCompleted) 里面的事件处理程序(OnDefineInDictCompleted)
没有被调用。这是代码

    internal void butMeaning_Click(object sender, RoutedEventArgs e)
    {
        graphPass.Visibility = Visibility.Collapsed;
        graphFail.Visibility = Visibility.Collapsed;

        if (txtFind.Text.ToString() != "Enter the word")
        {
            butNext.IsEnabled = true;
            DictServiceSoapClient client = GetDictServiceSoapClient();
            String meaningfor;
            if (txtRandomWord.Text.Trim().Length != 0)
            {
                txtRandomWord.Text = "";
                meaningfor = wordToGuess;
            }
            else
            {
                meaningfor = txtFind.Text.Trim().ToString();
            }

            if (meaningfor.Length != 0)
            {
                client.DefineInDictCompleted +=
                    new EventHandler<DefineInDictCompletedEventArgs
                            (OnDefineInDictCompleted);
                client.DefineInDictAsync("gcide", meaningfor);
            }
        }
    }

我没有在我的应用程序中使用 MVVM 模型。有什么方法我也可以调用事件处理程序。

【问题讨论】:

    标签: c# unit-testing windows-phone-7


    【解决方案1】:

    简单的答案是:尽管如此,还是要使用 MVVM。它的好处之一是更容易进行单元测试。但是,如果您选择不这样做,则应该在类似服务的类中创建一个单独的方法,该方法由事件处理程序调用,但也可以从单元测试中调用。

    该方法应仅包含您要测试的业务逻辑,而不是 UI 行为。 (使用视图模型,您甚至可以测试 UI 行为,因为它是抽象的)。这意味着它应该为您从 txtRandomWord 等控件获得的值提供参数。

    client 连接的事件处理程序有问题。

    首先,您通过按下按钮创建的每个client 实例的生命周期都会扩展到页面的生命周期,这会引入潜在的memory leak

    其次,我假设OnDefineInDictCompleted 是您页面中的一个方法,因此您也应该从页面中提取它,以便单元测试可以访问它。如果该方法涉及 UI 元素,这可能是一个真正令人头疼的问题。同样,视图模型的一个强有力的案例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多