Kod działa poprawnie po wywołaniu za pośrednictwem interfejsu użytkownika, ale nie działa po wywołaniu za pomocą testu jednostkowego. Udało mi się to zaadresować dla prostej aplikacji Winform.DataGridView nie przyjmuje źródła danych po wywołaniu za pomocą testu jednostkowego
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
}
}
}
kod testów jednostkowych
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.
}
}
}
następujący kod został wygenerowany przez projektanta
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);
}
Domyślam się, że jestem brakuje jakiegoś połączenia inicjacje Włącz obiektu dataGridView1 w ścieżce kodu testów jednostkowych . Ale używanie generowanego przez projektanta kodu w teście jednostkowym nie pomogło. Czy ma to związek z rzeczywistym obiektem powiązanym z obiektem Form
?
Jak to się nie udaje? –
@AustinSalonen dataGridView1.Rows.Count ma wartość 0. Powinno być 2. – Ankush