Geçmişte, birim sınama uygularken, veri erişimi katmanları için 'dürüst' birim sınamaları oluşturmak için çaba harcadım çünkü çoğu zaman bir dış bağımlılık olarak bir veritabanına sahipler. İdeal bir dünyada, saklı yordam çağrıları ile dış bağımlılığın ortadan kaldırılması için uğraşırdım. Bununla birlikte, MOQ alay çerçevesini kullanarak bunun nasıl yapılacağını ya da bunu destekleyen başka bir çerçeve bulmayı başaramadım. Bunun yerine, bilinen veriye sahip betikli bir test veritabanı oluşturmaya geri döndüm (böylece her zaman beklediğim çıktıları elde edebilirim), ancak bu katman Alay etmekten biraz farklıdır.C# birim sınama, saklı yordam yordamı
Veri erişim katmanının [https://effort.codeplex.com/'un var olduğu Varlık Çerçevesi için biliyorum] bu kısmının Nasıl Yapılacağını önerebilecek herhangi biri var mı? Örneğin
Detay I
SQLDataReader
belirtilen verileri içerir, böylece saklı yordam çıkış dalga nasıl aşağıdaki yöntem
public object RunStoredProc()
{
//Some Setup
using (SqlConnection conn = new SqlConnection(CONNNECTION_STRING))
{
using (SqlCommand comm = new SqlCommand("storedProcName", conn))
{
conn.Open();
comm.CommandType = CommandType.StoredProcedure;
using (SqlDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
//Logic
}
}
}
}
//Return object based on logic
}
varsa. Daha yüksek bir seviyede RunStoredProc()
yöntemini alay edebildim, ancak bu yöntemdeki mantığın doğru olup olmadığını test etmeme yardımcı olmaz. Alternatif başka bir yöntem haline dışarı SQLReader
şerit olabilir
public object RunStoredProc()
{
//Some Setup
List<object> data = GetData();
//Logic
//Return object based on logic
}
private List<object> GetData()
{
using (SqlConnection conn = new SqlConnection(CONNNECTION_STRING))
{
using (SqlCommand comm = new SqlCommand("storedProcName", conn))
{
conn.Open();
comm.CommandType = CommandType.StoredProcedure;
using (SqlDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
//place into return object
}
}
}
}
}
ama 'Getdata' yöntemi Sonra o alay etmek mümkün olmaz (yayımlanmış arabiriminin parçası değil) özel olması gerektiği gibi ve bu yüzden sorun kalıntıları
.
sayesinde [I ayrıca IDbConnection.CreatCommand alay etmek gerekirdi görünüyor alay IDbCommand döndürmek ama bu önemsiz olmalıdır]. Bir başkasının başka fikirleri varsa, bir süreliğine soruyu açık bırakacağım. –