我有如下代码:
public async Task<ValidationResult> ValidateAsync(Request request, Client client, CancellationToken cancellationToken = default)
{
if (request is null) throw new ArgumentNullException(nameof(request));
if (client is null) throw new ArgumentNullException(nameof(client));
if (string.IsNullOrEmpty(request.Parameter1) && request.Action != "merge")
return MissingParameter(nameof(request.Parameter1));
if (string.IsNullOrEmpty(request.Parameter2))
return MissingParameter(nameof(request.Parameter2));
if (string.IsNullOrEmpty(request.Parameter3))
return MissingParameter(nameof(request.Parameter3));
if (string.IsNullOrEmpty(request.Parameter4))
return MissingParameter(nameof(request.Parameter4));
if (string.IsNullOrEmpty(request.Parameter5))
return MissingParameter(nameof(request.Parameter5));
if (string.IsNullOrEmpty(request.Parameter6))
return MissingParameter(nameof(request.Parameter6));
// Validate length of some parameters
// Later validate for different combinations (some parameters aren't allowed when specific parameters are present)
// And other validation (e.g. whether client is allowed to requested parameter's values)
return new() { IsValid = true };
}
我想给它写测试
首先,如果请求或客户端为空,我检查方法是否抛出。很简单。
但稍后,我必须测试是否返回适当的错误(由缺少参数引起)。为此,我必须先为
parameter1
编写测试,然后再为 parameter2
编写测试,然后再为 parameter3
等等。在验证每个参数之前,我必须将比当前测试更早的参数设置为有效。
所以在每种方法中,我多次重复相同的代码。
稍后我验证例如一些参数的长度。对于我要检查的每个参数,我必须更早设置更早的参数以避免
return MissingParamater()
稍后我想验证不同的组合,所以我必须正确设置所有参数以避免因长度无效而导致
MissingParameter
和return
。
我希望你现在明白我的问题了。每个测试都重复相同的代码,相同的模拟,通常只有一件事发生变化。
所以我的问题是你将如何为我提供的代码编写测试,以及是否有可能创建“渐进式”单元测试(我的意思是一个测试说“我在这里结束”,下一个测试将从早期测试结束工作的地方开始测试。