Используют ли эти модульные тесты тестирование Moq?C#

Место общения программистов C#
Ответить
Anonymous
 Используют ли эти модульные тесты тестирование Moq?

Сообщение Anonymous »

Я пытаюсь протестировать метод репозитория, используя минимальный заказ с настройкой в ​​тесте. Насколько я могу судить, это не проверка метода, а только проверка теста.
Вот сокращенная версия кода репо. Это все еще немного долго, но потерпите.
Примечание: я изменил доступ с частного на внутренний, чтобы упростить этот пример. Обычно я использую отражение или захваченный метод для доступа к частному методу. Кроме того, я использую 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;
}
Тест, который я для этого настроил, использует Moq и использует настройку, чтобы избежать фактического обращения к базе данных...

Код: Выделить всё

[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" }));
}
Мой аргумент заключается в том, что, поскольку мы сообщаем вызову QueryAsync, что возвращать, вся предыдущая логика (операторы if) фактически игнорируется. Фактически, этот метод всегда будет возвращать значение moq'd.
Кроме того, если у нас есть класс обслуживания, который ничего не делает, кроме вызова этого метода, то тест этого класса также бессмысленен.
Что я упускаю?

Подробнее здесь: https://stackoverflow.com/questions/797 ... g-anything
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»