かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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;
            // 以下略

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