かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Windows Phone 7用の単体テストツール?

PrismのWP7用のライブラリのコードを読みながら気ままにTwitterをしていたら、単体テストのプロジェクトがあるので実行してみました。

WP7のエミュレータが起動して、ばばば〜っとテストを消化してくれてます。テストコードも以下のようにVisual Studio単体テストのコードでいけるみたいです。

    // お馴染みの属性でいける!
    [TestClass]
    public class ApplicationBarButtonCommandFixture
    {
        [TestMethod]
        public void CommandBehaviorMonitorsCanExecuteToSetEnabledWhenCanExecuteIsTrue()
        {
            var page = new PhoneApplicationPage();
            var bar = new ApplicationBar();
            var button = new ApplicationBarIconButton(new Uri("/foo.png", UriKind.Relative));
            button.Text = "Foo";
            bar.Buttons.Add(button);
            page.ApplicationBar = bar;
            var command = new ApplicationBarButtonCommand();
            command.ButtonText = "Foo";
            var bindingSource = new MyCommandHolder();
            var binding = new Binding("Command") { Source = bindingSource, Mode = BindingMode.OneWay };
            command.CommandBinding = binding;
            Interaction.GetBehaviors(page).Add(command);

            bindingSource.CanExecute = true;

            Assert.IsTrue(button.IsEnabled);
        }

        [TestMethod]
        public void CommandBehaviorMonitorsCanExecuteChangedToUpdateEnabledWhenCanExecuteChangedIsRaised()
        {
            var page = new PhoneApplicationPage();
            var bar = new ApplicationBar();
            var button = new ApplicationBarIconButton(new Uri("/foo.png", UriKind.Relative));
            button.Text = "Foo";
            bar.Buttons.Add(button);
            page.ApplicationBar = bar;
            var command = new ApplicationBarButtonCommand();
            command.ButtonText = "Foo";
            var bindingSource = new MyCommandHolder();
            var binding = new Binding("Command") { Source = bindingSource, Mode = BindingMode.OneWay };
            command.CommandBinding = binding;
            Interaction.GetBehaviors(page).Add(command);

            bindingSource.CanExecute = true;

            var initialState = button.IsEnabled;

            bindingSource.CanExecute = false;

            var finalState = button.IsEnabled;

            Assert.IsTrue(initialState);
            Assert.IsFalse(finalState);
        }

        public class MyCommandHolder
        {
            private bool canExecute;
            // 以下略

ちょっとこれどうやって自分で作るプロジェクトで作るのか試してみよう。