C# 初级开发人员(起步)指南:DTO和创建对象

C# 初级开发人员(起步)指南:DTO和创建对象,c#,.net,dto,C#,.net,Dto,我是一名初级开发人员,刚刚起步:)。我有一个项目,为我创建的API制作了一些数据传输对象(DTO)。我正在编写一些单元测试,希望单元测试和集成测试使用这些测试来传递数据和验证响应 我的问题是,我觉得我使用它们的方式不是最佳实践,我在重复我自己(干)。我能得到一些关于这件事的指导吗 DTO 然后我有一个类在单元测试中使用它: public async Task somethingTest() { var request = new myDTO.Request {

我是一名初级开发人员,刚刚起步:)。我有一个项目,为我创建的API制作了一些数据传输对象(DTO)。我正在编写一些单元测试,希望单元测试和集成测试使用这些测试来传递数据和验证响应

我的问题是,我觉得我使用它们的方式不是最佳实践,我在重复我自己(干)。我能得到一些关于这件事的指导吗

DTO

然后我有一个类在单元测试中使用它:

public async Task somethingTest()
{

    var request = new myDTO.Request
    {
        enabled= true,
        age     = 21,
        name    = "bob"
    };

    var returnedResponse = await new client().updatePerson(
            string.Format(PersonUri, users, userId),
            request);

    Assert.Equal(HttpStatusCode.NoContent, returnedResponse.StatusCode);
}

public async Task somethingTest2()
{

    var request = new myDTO.Request
    {
        enabled= true,
        age     = 28,
        name    = "Gill"
    };

    var returnedResponse = await new client().updatePerson(
            string.Format(PersonUri, users, userId),
            request);

    Assert.Equal(HttpStatusCode.NoContent, returnedResponse.StatusCode);
}

public async Task somethingTest3()
{

    var request = new myDTO.Request
    {
        enabled= true,
        age     = 45,
        name    = "tim"
    };

    var returnedResponse = await new client().updatePerson(
            string.Format(PersonUri, users, userId),
            request);

    Assert.Equal(HttpStatusCode.NoContent, returnedResponse.StatusCode);
}
我忍不住觉得有一种更好的方法来构建DTO,而不是一遍又一遍地构建DTO


非常感谢您提供的任何指导/帮助。

由于您的断言在所有三个测试中都是相同的,因此这些测试正在验证非常相似的场景

以下是您可以对这些测试进行的一些可能的更改,以避免重复,并可能扩展这些测试正在执行的验证:

  • 使用。这样,您只需要编写一次单元测试,就可以通过测试场景(数据)作为参数

  • 你的断言要尽量准确。也就是说,还断言您的客户机使用给定请求中的数据调用了存储库/DAL的更新方法

  • 最后,如果您担心随着时间的推移,DTOS的一致性,例如,如果您知道随着时间的推移,您将向DTO添加新属性,则可以考虑仅通过构造函数获得DTO的属性,并通过构造函数初始化它们。p>
最好在网站上问这个问题。谢谢Salah,他不知道这个网站。从现在起,我们将使用它!谢谢GMIS!断言与此相同,这只是一个示例。在其他情况下,我将检查不同的状态代码。在构造函数中如何构造代码,它们不需要设置为not Getpublic class Request{public bool Enabled{get;}public int Age{get;}public string Name{get;}public Request(bool Enabled,int Age,string Name){if(string.IsNullOrWhiteSpace(name)){抛出新参数异常(“message”,nameof(name));}Enabled=Enabled;Age=Age;name=name;}}}
public async Task somethingTest()
{

    var request = new myDTO.Request
    {
        enabled= true,
        age     = 21,
        name    = "bob"
    };

    var returnedResponse = await new client().updatePerson(
            string.Format(PersonUri, users, userId),
            request);

    Assert.Equal(HttpStatusCode.NoContent, returnedResponse.StatusCode);
}

public async Task somethingTest2()
{

    var request = new myDTO.Request
    {
        enabled= true,
        age     = 28,
        name    = "Gill"
    };

    var returnedResponse = await new client().updatePerson(
            string.Format(PersonUri, users, userId),
            request);

    Assert.Equal(HttpStatusCode.NoContent, returnedResponse.StatusCode);
}

public async Task somethingTest3()
{

    var request = new myDTO.Request
    {
        enabled= true,
        age     = 45,
        name    = "tim"
    };

    var returnedResponse = await new client().updatePerson(
            string.Format(PersonUri, users, userId),
            request);

    Assert.Equal(HttpStatusCode.NoContent, returnedResponse.StatusCode);
}