AWS CreateBatchWrite 单元测试
AWS CreateBatchWrite unit test
我正在尝试围绕 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 的 return 对象:BatchWrite 是强类型 class。
除了将我的先决条件移到下一层或上一层之外,还有什么方法可以对此进行单元测试吗?我的做法正确吗?
如果您只想测试先决条件,则创建被测 class 的实例,传递将导致预期行为的参数并断言它按预期发生。
如果测试不需要完成,则甚至不需要模拟依赖项。
例如
[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
条件作为隔离单元测试,仅提供安全执行测试所必需的条件。
我正在尝试围绕 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 的 return 对象:BatchWrite 是强类型 class。
除了将我的先决条件移到下一层或上一层之外,还有什么方法可以对此进行单元测试吗?我的做法正确吗?
如果您只想测试先决条件,则创建被测 class 的实例,传递将导致预期行为的参数并断言它按预期发生。
如果测试不需要完成,则甚至不需要模拟依赖项。
例如
[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
条件作为隔离单元测试,仅提供安全执行测试所必需的条件。