如何编写“渐进式”单元测试? C#

问题描述 投票:0回答:0

我有如下代码:

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

我希望你现在明白我的问题了。每个测试都重复相同的代码,相同的模拟,通常只有一件事发生变化。

所以我的问题是你将如何为我提供的代码编写测试,以及是否有可能创建“渐进式”单元测试(我的意思是一个测试说“我在这里结束”,下一个测试将从早期测试结束工作的地方开始测试。

c# unit-testing dry
© www.soinside.com 2019 - 2024. All rights reserved.