«Список <Choice>» не содержит определения для «ChoiceId» и не имеет расширения ... вы пропустили директиву using или ссылку на сборку?) - PullRequest
0 голосов
/ 05 июля 2018

Заголовок является лишь частью ошибки, вот одна из многих ошибок:

«Список» не содержит определения для «ChoiceId», и метод расширения «ChoiceId», принимающий первый аргумент типа «Список», не найден (отсутствует директива using или ссылка на сборку?)

Я пытаюсь протестировать список RepaymentPlan, как указано ниже. Но я не могу выбрать остальные значения в этом списке, так как я получаю красную ошибку подчеркивания ниже этих ключей (я завернул эти ключи с ** ** в модульном тесте ниже. Что-то не так, я делаю, и не знаю, как это сделать решить это.

Все еще учусь и новичок в программировании, так что, надеюсь, вы, ребята, поможете мне правильно. Очень ценю вашу помощь.

Вот что у меня есть:

Модели:

using System.Collections.Generic;

namespace Project.Models
{
    public class Repayment
    {
      public int Amount { get; set; }
      public string DueDate { get; set; }
      public string RepaymentId { get; set; }
    }

   public class Choice
   {
      public string ChoiceId { get; set; }
      public List<Repayment> Repayments{ get; set; }
   }

   public class RepaymentPlan
   {
      public List<Choice> Choices{ get; set; }
   }
}

Хранилища:

using System.Collections.Generic;
using System.Linq;
using Project.Models;
using System.Net;
using System.Collections.Specialized;
using System.Text;


namespace Project.Repositories
{
   public class OrderRepository
   {
       private static List<RepaymentPlan> _RepaymentPlan;

       static OrderRepository()
       {
           _RepaymentPlan = new List<RepaymentPlan>();

          _RepaymentPlan.Add(new RepaymentPlan 
          {
             Choices = new List<Choice>
                        {
                            new Choice
                            {
                                ChoiceId = "cho1",
                                Repayments = new List<Repayment>
                                                {
                                                    new Repayment
                                                    {
                                                        Amount = 200,
                                                        DueDate = "2018-06-01"
                                                    }, 
                                                    new Repayment
                                                    {
                                                        Amount = 100,
                                                        DueDate = "2018-08-01",
                                                    }
                                                }
                            }, 
                            new Choice
                            {
                                ChoiceId = "cho2",
                                Repayments = new List<Repayment>
                                                {
                                                    new Repayment
                                                    {
                                                        RepaymentId = "Choice1",
                                                        Amount = 300,
                                                        DueDate = "2018-10-01"
                                                    }, 
                                                    new Repayment
                                                    {
                                                        RepaymentId = "Choice2",
                                                        Amount = 150,
                                                        DueDate = "2018-11-01"
                                                    }, 
                                                }
                            }                                             
                        },
             });
}

* Юнит тест *

[Test]
public void ListRepaymentPlan()
{
     // Arrange
     var controller = new CaseController();
     var expectedResult = new List<RepaymentPlan>();
     var repaymentPlan = new RepaymentPlan()
     {
          Choices = new List<Choice>
                    {
                        new Choice
                        {
                            ChoiceId = "cho1",
                            Repayments = new List<Repayment>
                                            {
                                                new Repayment
                                                {
                                                    Amount = 200,
                                                    DueDate = "2018-06-01"
                                                }, 
                                                new Repayment
                                                {
                                                    Amount = 100,
                                                    DueDate = "2018-08-01"
                                                }, 
                                            }
                       }, 
                        new Choice
                        {
                             ChoiceId = "cho2",
                             Repayments = new List<Repayment>
                                            {
                                                new Repayment
                                                {
                                                    RepaymentId = "Choice1",
                                                    Amount = 300,
                                                    DueDate = "2018-10-01"
                                                }, 
                                                new Repayment
                                                {
                                                    RepaymentId = "Choice2",
                                                    Amount = 150,
                                                    DueDate = "2018-11-01"
                                                }, 
                                            }
                        }                                             
                    },

            };
            expectedResult.Add(RepaymentPlan );

     // Act
     var actionResult = controller.FindRepaymentPlan("578", "156");
     var result = (List<RepaymentPlan >)actionResult;

     // Assert
     for (var i = 0; i < result.Count; i++)
     {
         Assert.AreEqual(expectedResult[i].Choices , result[i].Choices);
         Assert.AreEqual(expectedResult[i].Choices.**ChoiceId**, result[i].Choices.**ChoiceId**);
         Assert.AreEqual(expectedResult[i].Choices.**ChoiceId**.Repayments, result[i].Choices.**ChoiceId**.Repayments);
         Assert.AreEqual(expectedResult[i].Choices.**Repayments**.Amount, result[i].Choices.**Repayments**.Amount);
         Assert.AreEqual(expectedResult[i].Choices.**Repayments**.DueDate, result[i].Choices.**Repayments**.DueDate);
     }
 }

** Обновлен юнит тест **

        // Assert
        for (var i = 0; i < result.Count; i++)
        {
            CollectionAssert.AreEqual(expectedResult[i].Choices, result[i].Choices);
            CollectionAssert.AreEqual(expectedResult[i].Choices[0].ChoiceId, result[i].Choices[0].ChoiceId);
            CollectionAssert.AreEqual(expectedResult[i].Choices[0].Repayments, result[i].Choices[0].Repayments);
            CollectionAssert.AreEqual(expectedResult[i].Choices, result[i].Choices);
            CollectionAssert.AreEqual(expectedResult[i].Choices[1].ChoiceId, result[i].Choices[1].ChoiceId);
            CollectionAssert.AreEqual(expectedResult[i].Choices[1].Repayments, result[i].Choices[1].Repayments);
        }

1 Ответ

0 голосов
/ 05 июля 2018

Choices - это List<>, поэтому вам тоже нужно его проиндексировать, что-то вроде этого:

expectedResult[i].Choices[0].ChoiceId

Тем не менее, вам также придется обойти эти внутренние значения. Гораздо проще использовать CollectionAssert:

CollectionAssert.AreEqual(expectedResult, result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...