Как проверить, что элемент не инициализирован? - PullRequest
0 голосов
/ 23 октября 2018

Я не могу найти где-нибудь, чтобы решить эту проблему.Я написал модульный тест для проверки этого метода

    public double CalculateTotalWeight()
    {
        double result = 0;
        if (Store?.TypeOfRacquet.Any())
        {
            result = Store.TypeOfRacquet.Sum(m => m.Weight);
        }
        return result;
    }

Модульный тест не пройден из-за того, что nullexceptionreference объект не инициализирован в свойстве Weight.Как проверить, есть ли какое-либо свойство Weight или инициализировано свойство weight?

Я пробовал многочисленные способы

if (Store?.TypeOfRacquet.Any())
if (Store?.TypeOfRacquet.Where(m => m.Weight != null)
if (Store?.TypeOfRacquet.First().Weight != null)

EDIT

вот мое свойство Weight внутри TypeOfRacquet

public int Weight
    {
        get { return Get<int>(); }
        set { Set(value); }
    }

мой модульный тест

[TestMethod]
    public void CalculateTotalt_Without_Weight_Test()
    {
        var entity = new Store
        {
            TypeOfRacquet = new TypeOfRacquet
            {
                Id = Guid.NewGuid()
            }
        };

        var result = entity.CalculateTotalWeight();

        Assert.AreEqual(0, result);
    }

при отладке я получаю System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Спасибо, ребята, за помощь, вот что я сделал, и это работает для меня

if (Store != null)
{
    foreach (var racquet in Store.TypeOfRacquet)
    {
        result += racquet.Weight;
    }
}
0 голосов
/ 23 октября 2018

Скорее всего, проблема в том, что ваш TypeOfRacquet равен нулю.Вы также должны проверить это в вашем if состоянии, прежде чем пытаться вызвать метод Any:

double result = 0;
if (Store?.TypeOfRacquet != null && Store.TypeOfRacquet.Any())
{
    result = Store.TypeOfRacquet.Sum(m => m.Weight);
}
return result;

Или, проще говоря:

return Store?.TypeOfRacquet?.Sum(m => m.Weight) ?? 0;
...