.net - sintaxis - Error de Rhino Mocks: método anterior ''IEnumerator.MoveNext();'' requiere un valor de retorno o una excepción para arrojar
personalizar exception c# (2)
milestones.Count()
está ejecutando así (ya que este es un objeto IEnumerable):
- Establecer contador a 0.
- Obtener el primer elemento.
- Agrega 1 al contador.
- Mover al siguiente elemento.
- Paso 3 hasta que el siguiente elemento sea nulo
- Devuelve el contador
Así que te sugiero que obtengas algo de reescritura.
Opción 1:
Cree una colección no IEnumerable, pero algún objeto más fuerte, como
List
oArray
:var milestones = viewModel.Milestones.ToArray();
//var milestones = viewModel.Milestones.ToList();Después de eso, puede usar la propiedad
Count
andLength
respectivamente para la comprobación deAssert
:Assert.That(milestones.Count, Is.EqualTo(1));
//Assert.That(milestones.Length, Is.EqualTo(1));Crea una variable local para almacenar el parámetro de conteo:
var count = viewModel.Milestones.Count(); // .Count() method executes here. Assert.That(count, Is.EqualTo(1));
Tengo el siguiente código de prueba:
parentViewModel = MockRepository.GenerateMock<IParentViewModel>();
parentViewModel.Expect(x => x.GetPropertyValue<IEnumerable<Milestone>>("JobMilestones")).Return(new Milestone[0]);
viewModel = new JobPenaltiesViewModel(j, new Penalty[0], _opContext, parentViewModel);
Assert.That(viewModel.Milestones.Count(), Is.EqualTo(0));
parentViewModel.VerifyAllExpectations();
List<string> propsChanged = new List<string>();
viewModel.PropertyChanged += (s, e) => propsChanged.Add(e.PropertyName);
parentViewModel.Raise(x => x.PropertyChanged += null, parentViewModel, new PropertyChangedEventArgs("JobMilestones"));
AssertPropertiesChangedAsExepected(propsChanged, 1, "Milestones");
Milestone m1 = GenerateMilestone(j);
List<Milestone> milestones1 = new List<Milestone> { m1 };
parentViewModel.Expect(x => x.GetPropertyValue<IEnumerable<Milestone>>("JobMilestones")).Return(milestones1).Repeat.Any();
IEnumerable<Milestone> milestones = viewModel.Milestones;
Assert.That(milestones.Count(), Is.EqualTo(1));
parentViewModel.VerifyAllExpectations();
Todas las pruebas y aserciones tienen éxito hasta que:
Assert.That(milestones.Count(), Is.EqualTo(1));
Ahí es donde obtengo la excepción:
Previous method ''IEnumerator.MoveNext();'' requires a return value or an exception to throw.
He intentado todo lo que puedo pensar, y mi prueba parece indicar que parentViewModel Mock devuelve nulo, o una enumeración vacía (es decir, cuando uso el depurador para inspeccionar el valor devuelto, la "Vista de resultados" dice que la enumeración no arrojó ningún resultado). resultados).
¿Que me estoy perdiendo aqui?
Desde entonces, eliminé el código ofensivo; sin embargo, nunca entendí por qué se comportaba de esa manera.