none
テストエクスプローラ上でのデバッグ実行でFormを表示したい RRS feed

  • 質問

  • 使用環境:VisualStudio2015Comunity
    やりたいこと:テストエクスプローラ上で当該テストを右クリック →選択したテストのデバッグでフォームを表示させたい。

    テストコード例:

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using System.Windows.Forms;
    using MS_TEST;
    
    namespace UnitTestProject1
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestMethod1()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }


    選択したテストの実行ではフォームが表示されますが、何が違うのでしょうか。



    • 編集済み fushy 2017年11月22日 11:33
    2017年11月22日 11:27

回答

  • 根本的な原因は不明ですが、FormのVisibleプロパティはtrueなのに、元になっているネイティブウィンドウにWS_VISIBLEが適用されていないみたいです。

    とりあえずはVisibleプロパティにtrueを設定してやれば表示されるようになります。

    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using System.Windows.Forms;
    namespace UnitTestProject1
    {
        [TestClass]
        public class UnitTest1
        {
    
            //[System.Runtime.InteropServices.DllImport("user32.dll")]
            //static extern bool IsWindowVisible(IntPtr hWnd);
    
    
            [TestMethod]
            [STAThread()]
            public void TestMethod1()
            {
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form1 f = new Form1();
                f.Visible = true; //trueと読み取れても再度trueを指定してやる
                //f.Load += (s, e) =>
                //  {
                //      if (!IsWindowVisible(f.Handle)) //Visibleプロパティを設定しないままだと非表示判定に
                //      {
                //          f.Visible = true;
                //      }
                //  };
                Application.Run(f);
            }
        }
    }

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2017年11月22日 13:06
    • 回答としてマーク fushy 2017年11月22日 15:25
    2017年11月22日 13:05

すべての返信

  • 根本的な原因は不明ですが、FormのVisibleプロパティはtrueなのに、元になっているネイティブウィンドウにWS_VISIBLEが適用されていないみたいです。

    とりあえずはVisibleプロパティにtrueを設定してやれば表示されるようになります。

    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using System.Windows.Forms;
    namespace UnitTestProject1
    {
        [TestClass]
        public class UnitTest1
        {
    
            //[System.Runtime.InteropServices.DllImport("user32.dll")]
            //static extern bool IsWindowVisible(IntPtr hWnd);
    
    
            [TestMethod]
            [STAThread()]
            public void TestMethod1()
            {
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form1 f = new Form1();
                f.Visible = true; //trueと読み取れても再度trueを指定してやる
                //f.Load += (s, e) =>
                //  {
                //      if (!IsWindowVisible(f.Handle)) //Visibleプロパティを設定しないままだと非表示判定に
                //      {
                //          f.Visible = true;
                //      }
                //  };
                Application.Run(f);
            }
        }
    }

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2017年11月22日 13:06
    • 回答としてマーク fushy 2017年11月22日 15:25
    2017年11月22日 13:05
  • ありがとうございます。

    無事に解決できました。

    これで、UIテストがデバックできます。

    助かりました。

    2017年11月22日 16:17