使用NUnit和NMock2我无法比较我认为相同的SqlParameters:
SqlParameter param1 = new SqlParameter("@Id", 1);
SqlParameter param2 = new SqlParameter("@Id", 1);
Assert.IsTrue(param1.Equals(param2)); // This failed
我在尝试使用NMock2
测试方法的执行时偶然发现了这个问题[Test]
public void UpdateComments()
{
const int arbitraryId = 1;
Comment comment = new Comment();
SqlParameter idParam = new SqlParameter("@ChangeId", arbitraryId);
Expect.Once.On(mockSqlDao).Method("ExecuteNonQuery")
.With("usp_Update_Comment", idParam);
changeDao.UpdateComment(arbitraryId, comment);
mocks.VerifyAllExpectationsHaveBeenMet();
}
我收到了这个错误:
NMock2.Internal.ExpectationException:意外调用sqlDao.ExecuteNonQuery(“usp_Update_Comment”,) 预期: 1次:sqlDao.ExecuteNonQuery(等于“usp_Update_Comment”,等于< @ ChangeId>)[被叫0次]
问题:
答案 0 :(得分:2)
因为.Equals()据我所知使用Equals的默认实现(这意味着SqlParameter只会“等于”另一个SqlParameter,如果它们是同一个对象),你需要直接查询属性用于确保传递正确数据的参数。
.With中的Has.Property调用允许您检查参数的属性,而不要求参数等于某个其他值。请尝试以下方法:
Expect.Once.On(mockSqlDao).Method("ExecuteNonQuery")
.With("usp_Update_Comment", Has.Property("ParameterName").EqualTo("@Id") &
Has.Property("Value").EqualTo(1));