NUnit与Rhino Mocks异常:为什么它会抛出此异常?
我遇到了一个对我来说毫无意义的例外 我有一个Expect方法调用,该方法包含3个参数:类型分别称为CallContext、IDal和List NUnit引发了两个异常:一个是不期望在类型为CallContext、System.Object和List的情况下发生方法调用,另一个是期望在类型正确的情况下没有发生调用。有趣的是,调用方法的唯一方法是使用上面提到的3种类型。没有类型为object的方法调用 代码如下:NUnit与Rhino Mocks异常:为什么它会抛出此异常?,nunit,rhino-mocks,nunit-console,rhino-mocks-3.5,nunit-mocks,Nunit,Rhino Mocks,Nunit Console,Rhino Mocks 3.5,Nunit Mocks,我遇到了一个对我来说毫无意义的例外 我有一个Expect方法调用,该方法包含3个参数:类型分别称为CallContext、IDal和List NUnit引发了两个异常:一个是不期望在类型为CallContext、System.Object和List的情况下发生方法调用,另一个是期望在类型正确的情况下没有发生调用。有趣的是,调用方法的唯一方法是使用上面提到的3种类型。没有类型为object的方法调用 代码如下: private IDal mockDal; private CallContext
private IDal mockDal;
private CallContext mockContext;
private IWorkbooksLogic mockWLogic;
private ICommercialSpaceLogic mockCLogic;
private CmWorkbook mockWorkbook;
private IList<Workbook> mockList;
private MockRepository mock;
private Random random;
[SetUp]
public void Setup() {
mock = new MockRepository();
random = new Random();
this.mockDal = mock.StrictMock<IDal>() as IDal;
this.mockContext = new CallContext();
this.mockWLogic = mock.StrictMock<IWorkbooksLogic>() as IWorkbooksLogic;
this.mockCLogic = mock.StrictMock<ICommercialSpaceLogic>() as ICommercialSpaceLogic;
this.mockWorkbook = new CmWorkbook();
this.mockList = mock.StrictMock<IList<Workbook>>() as IList<Workbook>;
}
[Test]
public void ShouldFailWhenCreateWorkbookFails() {
int randBudget = random.Next(50);
int randEntity = random.Next(50);
int randWork = random.Next(50);
WorkbookDefinitions work = new WorkbookDefinitions {
WorkbookDefinitionID = randWork
};
Budget budget = new Budget {
BudgetID = randBudget,
WorkbookDefinitions = new List<WorkbookDefinitions> { work },
};
CommercialProperty property = new CommercialProperty {
CommercialPropertyID = randEntity,
CMEntity = new CMEntity {
EntityBase = new EntityEntity { EntityCode = "random.Next(50)" }
}
};
CmWorkbook book = new CmWorkbook {
WorkbookName = String.Format("CM — {0}", property.CMEntity.EntityBase.EntityCode)
};
OperationResults results = new OperationResults();
this.mockList.Add(book);
using (mock.Record()) {
Expect.On(this.mockDal).Call(this.mockDal.GetObject<Budget, int>(randBudget)).Return(budget);
Expect.On(this.mockDal).Call(this.mockDal.GetObject<CommercialProperty, int>(randEntity)).Return(property);
Expect.On(this.mockWLogic).Call(this.mockWLogic.Create(this.mockContext, this.mockDal, this.mockList)).Return(null);
}
using (mock.Playback()) {
results = CmWorkbookLogic.CreateWorkbook(mockContext, mockDal, mockWLogic, mockCLogic, randBudget, randEntity);
}
Assert.IsFalse(results.AllSuccessful);
}
我不知道这到底是怎么回事。有人有什么想法吗?Rhino Mocks使用重载的Equals方法来比较预期调用和实际发生的调用的参数。您作为参数提供的某些对象没有重载Equals(即List类,不确定其他对象),因此,如果提供的参数具有与您用于设置期望值的参数相同的引用(相同的对象也是),则唯一可行的方法是 您有几个选择:
你能展示一下你有问题的测试吗?此外,测试中使用的类的方法列表(仅限签名)也会有所帮助!谢谢你的帮助!
ShouldFailWhenCreateWorkbookFails:
Rhino.Mocks.Exceptions.ExpectationViolationException : ICRUDBaseLogic`1.Create(CallContext, System.Object, System.Collections.Generic.List`1[Workbook]); Expected #0, Actual #1.
ICRUDBaseLogic`1.Create(CallContext, IDalProxy8768e63f86da4601993b4791c696ada6, System.Collections.Generic.List`1[Workbook]); Expected #1, Actual #0.