C# AWS CreateBatchWrite单元测试

C# AWS CreateBatchWrite单元测试,c#,.net,unit-testing,amazon-dynamodb,aws-sdk,C#,.net,Unit Testing,Amazon Dynamodb,Aws Sdk,我正试图围绕AWS DynamoDb C#库CreateBatchWrite编写一些单元测试 方法如下: public void BatchSave<T>(string tableName, List<T> items) { if (string.IsNullOrWhiteSpace(tableName)) { throw new ArgumentNullException(nameof(tableName)); } if

我正试图围绕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();
}
public void BatchSave(字符串tableName,列表项)
{
if(string.IsNullOrWhiteSpace(tableName))
{
抛出新ArgumentNullException(nameof(tableName));
}
if(items==null)
{
抛出新的ArgumentNullException(nameof(items));
}
RemoveAll(x=>x==null);
BatchWrite batch=\u dynamoDbContext.CreateBatchWrite(
新的dynamodboOperationConfig()
{
OverrideTableName=表名
});
批次.添加PutItems(项目);
batch.Execute();
}
  • 我想测试的是我的先决条件
  • _dynamoDbContext被注入,它是一个接口(IDynamoDBContext)
我的问题是CreateBatchWrite的返回对象:BatchWrite是一个强类型类


除了将我的先决条件移到下面或上面一层之外,还有什么方法可以对其进行单元测试吗?我的方法正确吗?

如果您只想测试先决条件,那么就创建一个被测试类的实例,传递将导致预期行为的参数,并断言它按预期发生

如果测试不需要执行到完成,甚至不需要模拟依赖项

比如说

[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);
    }
}
[TestClass]
公开课{
[测试]
public void应该为Null抛出TableName(){
//安排
var subject=新SubjectUnderTest(空);
ArgumentNullException异常=null;
var expected=“tableName”;
//表演
试一试{
subject.BatchSave(null,null);
}捕获(e){
例外=e;
}
//断言
异常.Should().NotBeNull();
异常.ParamName.Should().Be(应为);
}
[测试]
public void应为空项()抛出{
//安排
var subject=新SubjectUnderTest(空);
ArgumentNullException异常=null;
var expected=“items”;
//表演
试一试{
subject.BatchSave(“fakeTableName”,null);
}捕获(e){
例外=e;
}
//断言
异常.Should().NotBeNull();
异常.ParamName.Should().Be(应为);
}
}

上述测试将方法的两个
if
条件作为隔离单元测试进行测试,只提供安全执行测试到完成所需的条件。

显示您迄今为止如何在一个测试中测试它,如果您只想测试先决条件,则创建测试中类的实例,并传递将导致预期的行为并断言它发生了