Вот сокращенная версия кода репо. Это все еще немного долго, но потерпите.
Примечание: я изменил доступ с частного на внутренний, чтобы упростить этот пример. Обычно я использую отражение или захваченный метод для доступа к частному методу. Кроме того, я использую Dapper, но это не меняет проблемы.
Код: Выделить всё
internal async Task GetCropsAsync(DbConnection connection, DbTransaction? transaction, Guid accountId, string? languageId)
{
var sqlBuilder = new SqlBuilder();
var Name= "c.[name]";
var param = new Dictionary
{
{ "accountId", accountId }
};
if (!string.IsNullOrEmpty(languageId))
{
name= "isnull(lan.native_message, c.[name]) [name]";
param.Add(nameof(languageId), languageId);
}
var template = sqlBuilder.AddTemplate(
@$"SELECT
c.id
,c.last_modified
,{Name}
,ISNULL(cl.[color_hex], c.[color_hex]) as ColorHex
,c.pounds_per_bushel
,c.lang_msg_id
FROM tblSample c
/**leftjoin**/
/**where**/
/**orderby**/");
if (!string.IsNullOrEmpty(languageId))
{
sqlBuilder.LeftJoin($"dbo.tblLanguageMessageLocal lan ON lan.[message_id] = c.[lang_msg_id] AND lan.is_deleted = 0 AND lan.language_local_id = @{nameof(languageId)}");
}
sqlBuilder.LeftJoin("dbo.tblTwo cl ON cl.id= c.id and cl.is_deleted = 0 AND cl.account_id = @{nameof(@accountId)}");
sqlBuilder.Where("c.is_deleted = 0");
sqlBuilder.OrderBy("c.[name]");
var stuff = await connection.QueryAsync(template.RawSql, param, transaction);
return values;
}
Код: Выделить всё
[Fact]
public async Task GetStuffAsync_ReturnsStuff_WithLanguageId()
{
// Arrange
var accountId = Guid.NewGuid();
var languageId = string.Empty;
var expectedStuff = new List
{
new Thing
{
Id = Guid.NewGuid(),
LangMsgId = "msg1"
}
};
_mockConnection.SetupDapperAsync(x => x.QueryAsync(It.IsAny(), null, null, null, null)).ReturnsAsync(expectedStuff );**
// act
var result = await _repository.GetStuffAsync(_mockConnection.Object, _mockTransaction.Object, Guid.Empty, languageId);
// Assert
Assert.True(result != null &&
JsonConvert.SerializeObject(expectedStuff, new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }) ==
JsonConvert.SerializeObject(result, new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }));
}
Кроме того, если у нас есть класс обслуживания, который ничего не делает, кроме вызова этого метода, то тест этого класса также бессмысленен.
Что я упускаю?
Подробнее здесь: https://stackoverflow.com/questions/797 ... g-anything
Мобильная версия