Mam następujący kod testowy:Błąd makrofotografii: poprzednia metoda "IEnumerator.MoveNext();" wymaga wartości zwracanej lub wyjątek rzucać
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();
Wszystkie badania i twierdzenia uda się do:
Assert.That(milestones.Count(), Is.EqualTo(1));
To miejsce, gdzie pojawia się wyjątek:
Previous method 'IEnumerator.MoveNext();' requires a return value or an exception to throw.
Próbowałem wszystkiego, co mogę wymyślić, a moje testy wydają się wskazywać, że parentViewModel Mock zwraca null lub em wyliczanie pty (np. kiedy używam debuggera do sprawdzenia zwróconej wartości, "Widok wyników" mówi, że wyliczenie nie zwróciło żadnych wyników).
Czego mi tu brakuje?
Czy otrzymasz poprawny wynik, jeśli spróbujesz: 'IEnumerable kamieni milowych = parentViewModel.Milestones;' and 'Assert.That (kamienie milowe.Count(), Is.EqualTo (1))'? (Po prostu sprawdź gdzie straciłeś m1) –
steenhulthin
Nie, '' Assert.That (kamienie milowe.Count(), Is.EqualTo (1)) 'jest źródłem wyjątku. Nigdy nie dostaję się do 'parentViewModel.VerifyAllExpectations()' – CodingGorilla
Ok, nie było jasne, co miałem na myśli. Miałem na myśli dodanie linii tuż po 'parentViewModel.Expect (x => x.GetPropertyValue> (" JobMilestones ")). Return (milestones1) .Repeat.Dowolne(); ', więc możesz wystąpić na' parentViewModel' przed potwierdzeniem na 'viewModel'. Aby sprawdzić, czy 'm1' jest w' parentViewModel.JobMileStones' (napisałem parentViewModel.MileStones w pierwszym komentarzu - moje złe.). –
steenhulthin