我目前面臨一個大問題,我需要在 nUnit 中測驗使用 SQL Server 連接和存盤程序的方法。出于某種原因,當我嘗試模擬存盤庫并初始化依賴項時,該方法總是崩潰。
這是我的方法:
public int RunStoredProcedure()
{
List<string> myList = new List<string>();
string connetionString = null;
SqlConnection connection;
SqlDataAdapter adapter;
SqlCommand command = new SqlCommand();
SqlParameter param;
DataSet ds = new DataSet();
int i = 0;
connetionString = _myConnectionRepo.ConnectionString;
connection = new SqlConnection(connetionString);
connection.Open();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "SPCOUNTRY";
param = new SqlParameter("@COUNTRY", "Germany");
param.Direction = ParameterDirection.Input;
param.DbType = DbType.String;
command.Parameters.Add(param);
adapter = new SqlDataAdapter(command);
adapter.Fill(ds);
for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i )
{
myList.Add(ds.Tables[0].Rows[i][0].ToString());
}
connection.Close();
}
單元測驗是:
[Test]
public void Should_Return_String_list()
{
_repository.Setup(r => r.RunStoredProcedure()).Returns(new List<string>
{
"string1",
"string2",
"string3"
});
_cnxStringService
.SetUp(x => x.GetConnectionString)
.Returns("MockConnectionString");
var result = _repository.RunStoredProcedure();
Assert.That(result, It.IsNotNull);
}
當我運行專案時它運行完美,它正確回傳值但單元測驗說連接字串應該為空,我試圖給它傳遞一個簡單的字串但它說格式不正確,我也嘗試了隨機連接字串,它說沒有連接,但是如果我傳遞本地連接字串它可以作業,但是當我推送我的更改時它會崩潰。
有人可以幫我解決這個問題嗎?
提前致謝。
uj5u.com熱心網友回復:
我自己解決了這個問題,解決方案如下,為了避免單元測驗(nUnit)中的空參考,我們必須做的是創建兩個單獨的方法,一個從參考專案中檢索連接字串,另一個拆分該連接字串的值。
private static string ReturnConnectionString(IEnumerable<JToken> jTokenValues)
{
var cnxString = string.Empty;
for (int i = 0; i < jTokenValues.Count(); i )
{
var str1 = jTokenValues.ElementAt(i);
foreach (JProperty attributeProperty in str1)
{
if (attributeProperty.Name == "SqlConnectionString")
{
var attribute = str1[attributeProperty.Name];
cnxString = attribute.ToString();
}
}
}
return cnxString;
}
private static IEnumerable<JToken> ConfigureEnvironmentVariablesFromLocalSettings()
{
var path = Path.GetDirectoryName(typeof(DimAccountRepository)
.Assembly.Location); var json =
File.ReadAllText(Path.Join(path, "local.settings.json"));
var parsed = Newtonsoft.Json.Linq.JObject.Parse(json).Values();
return parsed;
}
多虧了這一點,我們可以初始化服務并傳遞連接字串并避免空參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/416279.html
標籤:
