Модульный тест AWS CreateBatchWrite - PullRequest
       7

Модульный тест AWS CreateBatchWrite

0 голосов
/ 14 сентября 2018

Я пытаюсь написать какой-нибудь модульный тест для библиотеки AWS DynamoDb C #, CreateBatchWrite.

Это метод:

public void BatchSave<T>(string tableName, List<T> items)
{
    if (string.IsNullOrWhiteSpace(tableName))
    {
        throw new ArgumentNullException(nameof(tableName));
    }

    if (items == null)
    {
        throw new ArgumentNullException(nameof(items));
    }

    items.RemoveAll(x => x == null);

    BatchWrite<T> batch = _dynamoDbContext.CreateBatchWrite<T>(
        new DynamoDBOperationConfig()
        {
            OverrideTableName = tableName
        });

    batch.AddPutItems(items);
    batch.Execute();
}
  • То, что я хочу проверить, это моипредварительное условие
  • _dynamoDbContext внедряется, и это интерфейс (IDynamoDBContext)

Моя проблема заключается в возвращении объекта из CreateBatchWrite: BatchWrite является строго типизированным классом.

Помимоперемещая мои предварительные условия на один уровень ниже или выше, есть ли способ модульного тестирования этого?Мой подход правильный?

1 Ответ

0 голосов
/ 14 сентября 2018

Если вы хотите только проверить предварительные условия, то создайте экземпляр тестируемого класса, передайте аргументы, которые приведут к ожидаемому поведению, и подтвердите, что это происходит так, как ожидалось.

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

Например,

[TestClass]
public class AwsTests {
    [Test]
    public void Should_Throw_For_Null_TableName() {
        //Arrange
        var subject = new SubjectUnderTest(null);
        ArgumentNullException exception = null;
        var expected = "tableName";

        //Act
        try {
            subject.BatchSave<object>(null, null);
        } catch (ArgumentNullException e) {
            exception = e;
        }

        //Assert
        exception.Should().NotBeNull();
        exception.ParamName.Should().Be(expected);
    }

    [Test]
    public void Should_Throw_For_Null_Items() {
        //Arrange
        var subject = new SubjectUnderTest(null);
        ArgumentNullException exception = null;
        var expected = "items";

        //Act
        try {
            subject.BatchSave<object>("fakeTableName", null);
        } catch (ArgumentNullException e) {
            exception = e;
        }

        //Assert
        exception.Should().NotBeNull();
        exception.ParamName.Should().Be(expected);
    }
}

. Вышеприведенное тестирует два if условия метода в качестве тестовых единиц изоляции, предоставляятолько то, что необходимо для безопасного выполнения теста до его завершения.

...