C# 从WP7中的UnitTest代码执行时未调用evenhandler

C# 从WP7中的UnitTest代码执行时未调用evenhandler,c#,unit-testing,windows-phone-7,C#,Unit Testing,Windows Phone 7,我正在WP7中为我的一个应用程序进行单元测试。我想检查一下按钮点击功能是否正常。当我试图从我的单元测试代码中调用button\u click函数时 如下 CheckUrVacabolary.MainPage cpage = new CheckUrVacabolary.MainPage(); cpage.txtFind.Text = "home"; cpage.butMeaning_Click(cpage,null); 但是按钮内的eventhan

我正在WP7中为我的一个应用程序进行单元测试。我想检查一下按钮点击功能是否正常。当我试图从我的单元测试代码中调用button\u click函数时 如下

        CheckUrVacabolary.MainPage cpage = new CheckUrVacabolary.MainPage();
        cpage.txtFind.Text = "home";
        cpage.butMeaning_Click(cpage,null);
但是按钮内的eventhandler(OnDefineIndicationCompleted)单击(OnDefineIndicationCompleted)
没有人打电话。这是密码

    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);
            }
        }
    }
内部无效但有意义\u单击(对象发送者,路由目标)
{
graphPass.Visibility=可见性。已折叠;
graphFail.Visibility=可见性。已折叠;
if(txtFind.Text.ToString()!=“输入单词”)
{
但是next.IsEnabled=true;
DictServiceSoapClient=GetDictServiceSoapClient();
字符串的意思是;
if(txtRandomWord.Text.Trim().Length!=0)
{
txtword.Text=“”;
意指=字数;
}
其他的
{
meaningfor=txtFind.Text.Trim().ToString();
}
if(表示长度!=0)
{
client.DefineInDictCompleted+=

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

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

客户端
连接到的事件处理程序有问题

首先,通过按下按钮创建的每个
客户端
实例的生命周期将扩展到页面的生命周期,这引入了一种潜在的风险


其次,我假设
ondefine
是页面中的一个方法,因此您应该以单元测试可以访问的方式从页面中提取该方法。如果该方法涉及UI元素,这可能是一个真正令人头痛的问题。同样,视图模型也是一个很好的例子。

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

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

客户端
连接到的事件处理程序有问题

首先,通过按下按钮创建的每个
客户端
实例的生命周期将扩展到页面的生命周期,这引入了一种潜在的风险

其次,我假设
ondefine
是您页面中的一个方法,因此您应该以单元测试可以访问的方式从页面中提取该方法。如果该方法涉及UI元素,这可能是一个真正令人头痛的问题。同样,视图模型也是一个很好的例子