FluentAssertions - отличная библиотека, но часто я очень расстраиваюсь, когда какой-то код в lambda не работает должным образом, и я не могу отладить его.Особенно когда лямбда сложная.
payload.Resource.Relations.Removed.Should().NotBeNull()
.And.HaveCount(2)
.And.AllBeOfType<ResourceRelation>()
.And.OnlyContain(rel =>
rel.RelationType.MatchTo(RelationType.ArtifactLink) &&
rel.Href.AbsoluteUri.StartsWith(VsTfsSchema.GitPullRequestId));
В этом случае я бы хотел установить точку останова внутри OnlyContain(...)
лямбды и отладить ее.Но это невозможно - точка останова устанавливается всегда на весь оператор.Я предполагаю, что причина в том, что лямбды в FluentAssertions являются выражениями.
Есть ли способ, как этого добиться?
Редактировать : извлечение лямбды как локальной переменной не помогает.Поведение такое же.
System.Linq.Expressions.Expression<Func<ResourceRelation, bool>> predicate = rel =>
rel.RelationType.MatchTo(RelationType.ArtifactLink) && rel.Href.AbsoluteUri.StartsWith(VsTfsSchema.GitPullRequestId);
payload.Resource.Relations.Removed.Should().NotBeNull()
.And.HaveCount(2)
.And.AllBeOfType<ResourceRelation>()
.And.OnlyContain(predicate);
Edit2 : Вот действительно простой и проверяемый пример.Вы не можете поместить точку останова в num == 1
, ни извлечь ее как локальную функцию, ни вывести ее на экран.
[Fact]
public void SimpleLambdaTest()
{
int[] nums = Enumerable.Range(1, 10).ToArray();
nums.Should().OnlyContain(num => num == 1);
}