У меня есть совокупность объектов (WeeklyMenuItem), содержащая подобъект (WeeklyMenuItemIngredient) в виде коллекции. WeeklyMenuItemIngredient можно установить только с помощью методов (AddOrUpdateIngredient, RemoveIngredient). Публичная коллекция представляет собой IReadOnlyCollection с частным списком, доступным только для чтения.
Я хочу создать тест для «добавления ингредиентов» с помощью NSubstitute. Метод замены AddOrUpdateIngredient добавляет ингредиент в частный список, но позже я не могу получить доступ к значению через общедоступную коллекцию ReadOnlyCollection.
Если я создам WeeklyMenuItem как обычный класс, я смогу получить доступ ценность. Проблема возникает только с заменителем.
Разве NSubstitute не поддерживает IReadOnlyCollections?
WeeklyMenuItem с методом ReadOnlyCollection и AddOrUpdateIngredient:
public partial class WeeklyMenuItem(long dayId,
long? createdById = null,
long? createdId = null,
long? updatedById = null,
long? updatedId = null) : BaseEntity, IAggregateRoot
private readonly List _weeklyMenuItemIngredient = [];
public virtual IReadOnlyCollection WeeklyMenuItemIngredient => _weeklyMenuItemIngredient.AsReadOnly();
public void AddOrUpdateIngredient(long ingredientId, decimal amount)
{
if (!WeeklyMenuItemIngredient.Any(e => e.WeeklyMenuItemId == this.Id && e.IngredientId == ingredientId))
{
_weeklyMenuItemIngredient.Add(new WeeklyMenuItemIngredient(this.Id, ingredientId, amount));
return;
}
var dishIngredient = WeeklyMenuItemIngredient.First(e => e.WeeklyMenuItemId == this.Id && e.IngredientId == ingredientId);
dishIngredient.SetAmount(amount);
}
Тест XUnit с методами создания подмены:
private readonly decimal amount1 = 1;
private readonly decimal amount2 = 2;
[Fact]
public void AddIngredient()
{
var weeklyMenuItem1 = new WeeklyMenuItem(1, null, null, null, null); //working
var weeklyMenuItem1 = WeeklyMenuItemTestData.GetWeeklyMenuItem1(DayTestData.GetDay1(WeekTestData.GetWeek1())); //not working
var ingredient1 = IngredientTestData.GetIngredient1();
weeklyMenuItem1.AddOrUpdateIngredient(ingredient1.Id, amount1);
var addedIngredient1 = weeklyMenuItem1.WeeklyMenuItemIngredient.FirstOrDefault(); //Empty - result is null value
weeklyMenuItem1.WeeklyMenuItemIngredient.Should().HaveCount(1);
addedIngredient1.Should().NotBeNull();
addedIngredient1!.IngredientId.Should().Be(ingredient1.Id);
addedIngredient1!.Amount.Should().Be(amount1);
}
public static WeeklyMenuItem GetWeeklyMenuItem1(Day? day)
{
var weeklyMenuItem1 = Substitute.For(day?.Id, null, null, null, null);
weeklyMenuItem1.Id.Returns(Id1);
weeklyMenuItem1.Day.Returns(day);
return weeklyMenuItem1;
}
public static Day GetDay1(Week? week)
{
var day1 = Substitute.For(Date1, week?.Id, BusinessesIsOpen);
day1.Id.Returns(Id1);
day1.Week.Returns(week);
return day1;
}
public static Week GetWeek1()
{
var week1 = Substitute.For(Year1, Value1);
week1.Id.Returns(Id1);
return week1;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... besides-pr
XUnit с NSubstitute - замененный общедоступный IReadOnlyCollection пуст, кроме частного списка, имеет значение ⇐ C#
Место общения программистов C#
1737470265
Anonymous
У меня есть совокупность объектов (WeeklyMenuItem), содержащая подобъект (WeeklyMenuItemIngredient) в виде коллекции. WeeklyMenuItemIngredient можно установить только с помощью методов (AddOrUpdateIngredient, RemoveIngredient). Публичная коллекция представляет собой IReadOnlyCollection с частным списком, доступным только для чтения.
Я хочу создать тест для «добавления ингредиентов» с помощью NSubstitute. Метод замены AddOrUpdateIngredient добавляет ингредиент в частный список, но позже я не могу получить доступ к значению через общедоступную коллекцию ReadOnlyCollection.
Если я создам WeeklyMenuItem как обычный класс, я смогу получить доступ ценность. Проблема возникает только с заменителем.
Разве NSubstitute не поддерживает IReadOnlyCollections?
WeeklyMenuItem с методом ReadOnlyCollection и AddOrUpdateIngredient:
public partial class WeeklyMenuItem(long dayId,
long? createdById = null,
long? createdId = null,
long? updatedById = null,
long? updatedId = null) : BaseEntity, IAggregateRoot
private readonly List _weeklyMenuItemIngredient = [];
public virtual IReadOnlyCollection WeeklyMenuItemIngredient => _weeklyMenuItemIngredient.AsReadOnly();
public void AddOrUpdateIngredient(long ingredientId, decimal amount)
{
if (!WeeklyMenuItemIngredient.Any(e => e.WeeklyMenuItemId == this.Id && e.IngredientId == ingredientId))
{
_weeklyMenuItemIngredient.Add(new WeeklyMenuItemIngredient(this.Id, ingredientId, amount));
return;
}
var dishIngredient = WeeklyMenuItemIngredient.First(e => e.WeeklyMenuItemId == this.Id && e.IngredientId == ingredientId);
dishIngredient.SetAmount(amount);
}
Тест XUnit с методами создания подмены:
private readonly decimal amount1 = 1;
private readonly decimal amount2 = 2;
[Fact]
public void AddIngredient()
{
var weeklyMenuItem1 = new WeeklyMenuItem(1, null, null, null, null); //working
var weeklyMenuItem1 = WeeklyMenuItemTestData.GetWeeklyMenuItem1(DayTestData.GetDay1(WeekTestData.GetWeek1())); //not working
var ingredient1 = IngredientTestData.GetIngredient1();
weeklyMenuItem1.AddOrUpdateIngredient(ingredient1.Id, amount1);
var addedIngredient1 = weeklyMenuItem1.WeeklyMenuItemIngredient.FirstOrDefault(); //Empty - result is null value
weeklyMenuItem1.WeeklyMenuItemIngredient.Should().HaveCount(1);
addedIngredient1.Should().NotBeNull();
addedIngredient1!.IngredientId.Should().Be(ingredient1.Id);
addedIngredient1!.Amount.Should().Be(amount1);
}
public static WeeklyMenuItem GetWeeklyMenuItem1(Day? day)
{
var weeklyMenuItem1 = Substitute.For(day?.Id, null, null, null, null);
weeklyMenuItem1.Id.Returns(Id1);
weeklyMenuItem1.Day.Returns(day);
return weeklyMenuItem1;
}
public static Day GetDay1(Week? week)
{
var day1 = Substitute.For(Date1, week?.Id, BusinessesIsOpen);
day1.Id.Returns(Id1);
day1.Week.Returns(week);
return day1;
}
public static Week GetWeek1()
{
var week1 = Substitute.For(Year1, Value1);
week1.Id.Returns(Id1);
return week1;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79374831/xunit-with-nsubstitute-substituted-public-ireadonlycollection-empty-besides-pr[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия