Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对这个函数进行单元测试?_C#_Unit Testing_Asp.net Core_Async Await_Graphql - Fatal编程技术网

C# 如何对这个函数进行单元测试?

C# 如何对这个函数进行单元测试?,c#,unit-testing,asp.net-core,async-await,graphql,C#,Unit Testing,Asp.net Core,Async Await,Graphql,我正在尝试为以下代码编写单元测试: 这是我的逻辑 public async Task RemoveUser(string id) { var response = await _graphQLClient.SendMutationAsync<Response>(request); if (response.Errors != null) { throw new ClientException(errorMessages); } }

我正在尝试为以下代码编写单元测试:

这是我的逻辑

public async Task RemoveUser(string id)
{
    var response = await _graphQLClient.SendMutationAsync<Response>(request);
    if (response.Errors != null)
    {
         throw new ClientException(errorMessages);
    }
}
公共异步任务RemoveUser(字符串id)
{
var response=wait_graphQLClient.SendMutationAsync(请求);
if(response.Errors!=null)
{
抛出新的ClientException(errorMessages);
}
}
这是我的单元测试

[Test]
public void RemoveUser_ShouldCancelUserOnSucessfulRemoval()
{
     _mockGraphQLClient
                .Setup(client => client.SendMutationAsync<object>(It.IsAny<GraphQLRequest>(), It.Is<CancellationToken>(token => token == default)))
                .ReturnsAsync( new GraphQLResponse<object>());

     var psClient = new PsClient(_mockGraphQLClient.Object);
     var removeUserResults = psClient.RemoveUser(id);
     Assert.AreEqual(removeUserResults, /* what to put here? */ );
}
[测试]
public void remove用户\u应取消useronsucessfulremove()
{
_mockGraphQLClient
.Setup(client=>client.SendMutationAsync(It.IsAny(),It.Is(token=>token==default)))
.ReturnsAsync(新的GraphQLResponse());
var psClient=新的psClient(_mockGraphQLClient.Object);
var removeUserResults=psClient.RemoveUser(id);
AreEqual(removeUserResults,/*在这里放什么?*/);
}
我不知道应该比较什么样的结果

以及如何处理:


如果您在单元测试中使用异步任务,最好将测试函数也设置为任务

幸运的是,该框架支持这一点

添加
async
也会给您带来
wait
的好处

public async Task RemoveUser_ShouldCancelUserOnSucessfulRemoval()
{
   //...

   await psClient.RemoveUser(id);
   //nothing thrown, all okay --- not really the best test case
}
通常,您会声明一些响应:

public async Task RemoveUser_ShouldCancelUserOnSucessfulRemoval()
{
   //...

   var result = await psClient.RemoveUser(id);

   //Assert(result);
}
或更多的整合风格

public async Task RemoveUser_ShouldCancelUserOnSucessfulRemoval()
{
   //...

   var removeResult = await psClient.RemoveUser(id);

   var queryResult = await psClient.GetUser(id);

   //assert user is gone
}

如果您在单元测试中使用异步任务,最好将测试函数也设置为任务

幸运的是,该框架支持这一点

添加
async
也会给您带来
wait
的好处

public async Task RemoveUser_ShouldCancelUserOnSucessfulRemoval()
{
   //...

   await psClient.RemoveUser(id);
   //nothing thrown, all okay --- not really the best test case
}
通常,您会声明一些响应:

public async Task RemoveUser_ShouldCancelUserOnSucessfulRemoval()
{
   //...

   var result = await psClient.RemoveUser(id);

   //Assert(result);
}
或更多的整合风格

public async Task RemoveUser_ShouldCancelUserOnSucessfulRemoval()
{
   //...

   var removeResult = await psClient.RemoveUser(id);

   var queryResult = await psClient.GetUser(id);

   //assert user is gone
}

如果我这样做,它将抛出一个错误,无法将void分配给隐式类型的变量。啊,对不起,您的RemoveUserId没有返回任何内容。您想要测试什么结果?如果您想要测试没有异常,上面的代码将起作用。您将等待调用,抛出的任何异常都将使测试失败。要测试用户是否被删除,需要比较数据集。这有点复杂。@Fedrick,断言在异步测试方法和void方法中没有区别。正如Stefan所说的那样,等待任务,像平常一样做你的断言。从字面上看,唯一的区别是使方法“async Task”而不是void,并在调用测试中的方法时等待结果。代码的其余部分应该非常相同。另外,如果您的测试用例是您没有得到异常,那么您不会断言。您只需让它运行(
MethodUnderTest\u regularsecenario\u NoExceptions()
)。。但是如果你的方法有一个输出,你就编写测试来断言输出是什么。如果我这样做,它就会抛出一个错误,无法将void赋值给隐式类型的变量。啊,对不起,你的RemoveUserId没有返回任何东西。您想要测试什么结果?如果您想要测试没有异常,上面的代码将起作用。您将等待调用,抛出的任何异常都将使测试失败。要测试用户是否被删除,需要比较数据集。这有点复杂。@Fedrick,断言在异步测试方法和void方法中没有区别。正如Stefan所说的那样,等待任务,像平常一样做你的断言。从字面上看,唯一的区别是使方法“async Task”而不是void,并在调用测试中的方法时等待结果。代码的其余部分应该非常相同。另外,如果您的测试用例是您没有得到异常,那么您不会断言。您只需让它运行(
MethodUnderTest\u regularsecenario\u NoExceptions()
)。。但是如果方法有一个输出,那么您就编写测试来断言输出是什么;你为什么把大部分问题都删掉了?现在,质量很低,不太可能帮助别人。最初提供的代码为其他人提供了更多与他们自己的问题相关的上下文。我恢复了您的编辑,以保留问题并保持其质量;你为什么把大部分问题都删掉了?现在,质量很低,不太可能帮助别人。最初提供的代码为其他人提供了更多与他们自己的问题相关的上下文。我恢复了您的编辑,以保留问题并保持其质量。