Tôi đã mã kiểm tra sau:Rhino Mocks Lỗi: Phương pháp trước 'IEnumerator.MoveNext();' đòi hỏi một giá trị trả về hoặc một ngoại lệ để ném
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();
Tất cả các bài kiểm tra và khẳng định thành công cho đến khi:
Assert.That(milestones.Count(), Is.EqualTo(1));
Đó là nơi mà tôi nhận được ngoại lệ:
Previous method 'IEnumerator.MoveNext();' requires a return value or an exception to throw.
Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến, và thử nghiệm của tôi dường như chỉ ra rằng parentViewModel Mock trả về null hoặc một em liệt kê pty (tức là khi tôi sử dụng trình gỡ lỗi để kiểm tra giá trị trả về, 'Chế độ xem kết quả' cho biết liệt kê không trả về kết quả nào).
tôi thiếu gì ở đây?
Bạn có nhận được kết quả chính xác không nếu bạn cố gắng thực hiện: 'IEnumerable milestones = parentViewModel.Milestones;' và 'Assert.That (milestones.Count(), Is.EqualTo (1))'? (Chỉ cần xác minh nơi bạn mất m1) –
steenhulthin
Không, 'Assert.That (milestones.Count(), Is.EqualTo (1))' là nguồn gốc của ngoại lệ. Tôi không bao giờ nhận được 'parentViewModel.VerifyAllExpectations()' – CodingGorilla
Ok, tôi không rõ ràng ý của tôi là gì. Tôi có nghĩa là thêm các dòng ngay sau 'parentViewModel.Expect (x => x.GetPropertyValue> (" JobMilestones ")). Return (milestones1) .Repeat.Bất kỳ(); 'để bạn khẳng định trên' parentViewModel' trước khi khẳng định trên 'viewModel'. Để xác minh rằng 'm1' nằm trong' parentViewModel.JobMileStones' (tôi đã viết parentViewModel.MileStones trong bình luận đầu tiên - bad của tôi.). –
steenhulthin