C# 无法从';Microsoft.AspNetCore.Mvc.ActionResult';至';System.Collections.Generic.IEnumerable<;字符串>';

C# 无法从';Microsoft.AspNetCore.Mvc.ActionResult';至';System.Collections.Generic.IEnumerable<;字符串>';,c#,unit-testing,asp.net-core,.net-core,C#,Unit Testing,Asp.net Core,.net Core,我在控制器中有一个异步方法,它从客户端调用该方法。我想在foreach循环中迭代此方法,但出现错误: *Cannot convert from 'Microsoft.AspNetCore.Mvc.ActionResult' to 'System.Collections.Generic.IEnumerable<string>'* *无法从“Microsoft.AspNetCore.Mvc.ActionResult”转换为“System.Collections.Generic.IEnu

我在控制器中有一个异步方法,它从客户端调用该方法。我想在foreach循环中迭代此方法,但出现错误:

*Cannot convert from 'Microsoft.AspNetCore.Mvc.ActionResult' to 'System.Collections.Generic.IEnumerable<string>'*
*无法从“Microsoft.AspNetCore.Mvc.ActionResult”转换为“System.Collections.Generic.IEnumerable”*
UnitTest.cs

[TestFixture]
    public class ClientUnitTests 
    {
        private MessagesController Controller = new MessagesController(null, null, null);

        [Test]
        public async Task Check_API_Links()
        {
            // Arrange
            List<IEnumerable<string>> reporteeList = new List<IEnumerable<string>>();

            var links = await Controller.GetLinks();
            reporteeList.Add(links); //Cannot convert from 'Microsoft.AspNetCore.Mvc.ActionResult' to 'System.Collections.Generic.IEnumerable<string>'
            foreach (var itemLink in reporteeList)
            {
                reporteeList.Add(itemLink);
            }

            // Assert
            Assert.IsNotNull(reporteeList);
            Assert.GreaterOrEqual(0, reporteeList.Count);
            Assert.IsInstanceOf<IEnumerable<string>>(reporteeList);
        }
}
[HttpGet]
 public async Task<ActionResult> GetLinks()
 {
   var result = await _client.GetLinks();

    return Ok(result);
 }
public async Task<ActionResult<IEnumerable<string>>> GetLinks()
{
   // Some logic here, 
}
[TestFixture]
公共类ClientUnitTests
{
私有MessagesController=新MessagesController(null,null,null);
[测试]
公共异步任务检查\u API\u链接()
{
//安排
List reporteeList=新列表();
var links=await Controller.GetLinks();
ReporteList.Add(links);//无法从“Microsoft.AspNetCore.Mvc.ActionResult”转换为“System.Collections.Generic.IEnumerable”
foreach(ReporteList中的var itemLink)
{
reporteeList.Add(itemLink);
}
//断言
Assert.IsNotNull(reporteeList);
Assert.GreaterOrEqual(0,reporteeList.Count);
Assert.IsInstanceOf(reporteeList);
}
}
控制器.cs

[TestFixture]
    public class ClientUnitTests 
    {
        private MessagesController Controller = new MessagesController(null, null, null);

        [Test]
        public async Task Check_API_Links()
        {
            // Arrange
            List<IEnumerable<string>> reporteeList = new List<IEnumerable<string>>();

            var links = await Controller.GetLinks();
            reporteeList.Add(links); //Cannot convert from 'Microsoft.AspNetCore.Mvc.ActionResult' to 'System.Collections.Generic.IEnumerable<string>'
            foreach (var itemLink in reporteeList)
            {
                reporteeList.Add(itemLink);
            }

            // Assert
            Assert.IsNotNull(reporteeList);
            Assert.GreaterOrEqual(0, reporteeList.Count);
            Assert.IsInstanceOf<IEnumerable<string>>(reporteeList);
        }
}
[HttpGet]
 public async Task<ActionResult> GetLinks()
 {
   var result = await _client.GetLinks();

    return Ok(result);
 }
public async Task<ActionResult<IEnumerable<string>>> GetLinks()
{
   // Some logic here, 
}
[HttpGet]
公共异步任务GetLinks()
{
var result=wait_client.GetLinks();
返回Ok(结果);
}
Client.cs

[TestFixture]
    public class ClientUnitTests 
    {
        private MessagesController Controller = new MessagesController(null, null, null);

        [Test]
        public async Task Check_API_Links()
        {
            // Arrange
            List<IEnumerable<string>> reporteeList = new List<IEnumerable<string>>();

            var links = await Controller.GetLinks();
            reporteeList.Add(links); //Cannot convert from 'Microsoft.AspNetCore.Mvc.ActionResult' to 'System.Collections.Generic.IEnumerable<string>'
            foreach (var itemLink in reporteeList)
            {
                reporteeList.Add(itemLink);
            }

            // Assert
            Assert.IsNotNull(reporteeList);
            Assert.GreaterOrEqual(0, reporteeList.Count);
            Assert.IsInstanceOf<IEnumerable<string>>(reporteeList);
        }
}
[HttpGet]
 public async Task<ActionResult> GetLinks()
 {
   var result = await _client.GetLinks();

    return Ok(result);
 }
public async Task<ActionResult<IEnumerable<string>>> GetLinks()
{
   // Some logic here, 
}
public异步任务GetLinks()
{
//这里有一些逻辑,
}
我如何在单元测试中通过迭代trought GetLinks方法来解决这个问题

谢谢。

假设.NET核心2.1

public async Task<ActionResult<IEnumerable<string>>> GetLinks()
public异步任务GetLinks()
还是不太受欢迎的

public async Task<IActionResult> GetLinks()
public异步任务GetLinks()

对于您的问题,您将
ActionResult
Ok
List
IEnumerable
嵌入

对于当前的设计,请尝试以下代码:

        List<IEnumerable<string>> reporteeList = new List<IEnumerable<string>>();
        var result = await controller.GetLinks();
        var links = ((ObjectResult)((ActionResult<IEnumerable<string>>)((ObjectResult)result).Value).Result).Value as IEnumerable<string>;
        reporteeList.Add(links);
List reporteeList=newlist();
var result=await controller.GetLinks();
变量链接=((ObjectResult)((ActionResult)((ObjectResult)result).Value.result).Value作为IEnumerable;
reporteeList.Add(链接);
但是,在我的选项中,您不应该使用嵌入对象。请检查以下设计是否符合您的要求

Client.cs返回
IEnumerable
而不是
ActionResult

公共类客户端
{
公共异步任务GetLinks()
{
IEnumerable links=新列表(){
“L1”、“L2”
};
返回新的ObjectResult(链接);
//这里有一些逻辑,
}
公共异步任务GetLinks1()
{
IEnumerable links=新列表(){
“L1”、“L2”
};
返回链接;
//这里有一些逻辑,
}
}
控制器

    public async Task<ActionResult> GetLinks1()
    {
        var result = await new Client().GetLinks1();
        return Ok(result);
    }
public异步任务GetLinks1()
{
var result=wait new Client().GetLinks1();
返回Ok(结果);
}
试验

        List<string> reporteeList1 = new List<string>();
        var result1 = await controller.GetLinks1();
        var links1 = result1 as ObjectResult;
        reporteeList1.AddRange((IEnumerable<string>)links1.Value);
List reporteeList1=newlist();
var result1=await controller.GetLinks1();
var links1=result1作为ObjectResult;
reporteeList1.AddRange((IEnumerable)links1.Value);
测试

[事实]
公共异步任务在调用时获取\u ReturnsAllItemsCount()
{
//表演
var result=await_controller.GetLinks1();
var okResult=result.result作为OkObjectResult;
//断言
var items=Assert.IsType(okResult.Value);
Assert.Equal(2,items.Count);
}

您需要将其包装到ActionResultI'v中,并将其添加到客户端方法中,但UnitTest中存在相同的错误