usuario sintaxis propias por personalizar personalizadas personalizada para net manejo excepciones excepcion errores crear creadas asp .net unit-testing c#-4.0 rhino-mocks

.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):

  1. Establecer contador a 0.
  2. Obtener el primer elemento.
  3. Agrega 1 al contador.
  4. Mover al siguiente elemento.
  5. Paso 3 hasta que el siguiente elemento sea nulo
  6. Devuelve el contador

Así que te sugiero que obtengas algo de reescritura.

Opción 1:

  1. Cree una colección no IEnumerable, pero algún objeto más fuerte, como List o Array :

    var milestones = viewModel.Milestones.ToArray();
    //var milestones = viewModel.Milestones.ToList();

    Después de eso, puede usar la propiedad Count and Length respectivamente para la comprobación de Assert :

    Assert.That(milestones.Count, Is.EqualTo(1));
    //Assert.That(milestones.Length, Is.EqualTo(1));

  2. 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.