0

这是一个简单的 WPF 应用程序代码的一部分:3 个文本框、一个下拉列表和一个按钮。通过单击按钮,将检查输入值。

   private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        if (textBox1.Text.Length>127)
            throw new ArgumentException();
        if (string.IsNullOrEmpty(textBox2.Text))
            errorsList.Add("You must to fill out textbox2");
        else if (string.IsNullOrEmpty(textBox3.Text))
           errorsList.Add("You must to fill out textbox3"); 
       else if
        {
            Regex regex = new Regex(@".........");
            Match match = regex.Match(emailTxt.Text);
            if (!match.Success)
                errorsList.Add("e-mail is inlvalid");
        }
        //.....
     }

我必须使用任何单元测试框架对其进行测试。我想知道是否可以在这里进行单元测试?我想不是吧?

4

3 回答 3

5

如果不进行重构,就不可能对您拥有的当前代码进行单元测试。您应该将该逻辑封装在 ViewModel 类中。我想你可以有类似的东西

DoTheJob(string1,string2,string3,...)

和viev 模型error/errorList/exList一样。ObservableCollections有了这些前提条件,您可以编写一套单元测试来检查您的代码行为。

于 2012-09-22T05:43:51.480 回答
0

所以基本上你需要一个代表你的 UI 的视图模型类

        public class ViewModel
    {
        public ViewModel()
        {
            ButtonClickCommand = new RelayCommand(Validate);
        }

        private void Validate()
        {
            if (Text1.Length > 127) 
                throw new ArgumentException();
            if (string.IsNullOrEmpty(Text2)) 
                ErrorList.Add("You must to fill out textbox2");
            else if (string.IsNullOrEmpty(Text3)) 
                ErrorList.Add("You must to fill out textbox3");
            else
            {
                Regex regex = new Regex(@".........");
                Match match = regex.Match(Email);
                if (!match.Success) ErrorList.Add("e-mail is inlvalid");
            }
        }

        public string Text1 { get; set; }
        public string Text2 { get; set; }
        public string Text3 { get; set; }
        public string Email { get; set; }
        public ObservableCollection<string> ErrorList { get; set; }
        public ICommand ButtonClickCommand { get; private set; }
    }

并且 ViewModel 的实例应该附加到您的控件/窗口的 DataContext 属性。

在这种方法中,您可以按照您想要的方式对您的 ViewModel 进行单元测试 :)

于 2012-09-23T11:14:49.440 回答
0

好吧,如果你命令绑定你的按钮

<Button Command="{Binding SayHello}">Hello</Button>

然后在您的单元测试中,您应该能够在按钮上执行命令。

var button = GetMyButton();
button.Command.Execute(new object());
于 2015-06-15T16:45:16.283 回答