UI経由で呼び出されたときにコードは正常に動作しますが、単体テストで呼び出された場合は正常に動作しません。私は簡単なWinform Appのためにこれを再現することができました。ユニットテストで呼び出された場合、DataGridViewはDataSourceを受け入れません。
namespace WinFormApp
{
public class Pair
{
public string Key { get; set; }
public string Value { get; set; }
}
public class FormManager
{
List<Pair> _source = new List<Pair>()
{
new Pair() { Key="1", Value = "one" },
new Pair() { Key = "2", Value = "two" }
};
public FormManager(DataGridView dgv)
{
dgv.DataSource = _source;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
FormManager manager = new FormManager(dataGridView1); // This works
}
}
}
ユニットテストコード
namespace WinFormApp.Test
{
[TestClass()]
public class FormManagerTest
{
private DataGridView dataGridView1;
[TestMethod()]
public void FormManagerTestSource()
{
this.dataGridView1 = new System.Windows.Forms.DataGridView();
FormManager target = new FormManager(dataGridView1);
Assert.AreEqual(2, dataGridView1.Rows.Count); // This fails.
}
}
}
次のコードは、デザイナーによって生成された
private void InitializeComponent()
{
this.dataGridView1 = new System.Windows.Forms.DataGridView();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.SuspendLayout();
//
// dataGridView1
//
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Location = new System.Drawing.Point(20, 27);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.Size = new System.Drawing.Size(240, 150);
this.dataGridView1.TabIndex = 0;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.dataGridView1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.ResumeLayout(false);
}
私の推測では、私はユニットテストコードパスにdataGridView1オブジェクト上のinitの呼び出しのいくつかの種類を欠けているあります。しかし、単体テストでデザイナーが生成したコードを使用しても役に立ちませんでした。これはForm
オブジェクトに関連付けられた実際のオブジェクトと関連していますか?あなたが統合テストではなく、ユニットテストを実施しようとしているように
どのように失敗しますか? –
@AustinSalonen dataGridView1.Rows.Countは0です。これは2にする必要があります。 – Ankush