【发布时间】:2012-11-28 18:32:43
【问题描述】:
我之前问过一个关于如何set value of interface in testing a method 的问题 .我已经成功地将 Moq 框架实施到我的项目中,并且测试运行良好。
这是我提供的示例代码:
public void PostEvent(
eVtCompId inSenderComponentId,
eVtEvtId inEventId,
long inEventReference,
IF_SerializableData inEventData)
{
if(mEventMap.ContainsKey(inEventId))
{
mEventMap[inEventId](inSenderComponentId, inEventReference, inEventData);
}
}
这里我有 4 个参数:第一个:一个枚举,第二个:另一个枚举,第三个:long,第四个:一个接口。 然而,我错了,第四个参数(接口)不应该是接口,而是接口的reference。 p>
所以它应该是这样的:
public void PostEvent(
eVtCompId inSenderComponentId,
eVtEvtId inEventId,
long inEventReference,
ref IF_SerializableData inEventData)
给我的示例 Moq 测试代码(就是这个)...
var serializable = new Mock<IF_SerializableData>();
target.PostEvent(..., serializable.Object);
...不起作用。我已经尝试过ref serializable.Object,但它仍然无法正常工作,因为我收到一个错误,提示 ref 参数期望引用一个变量,而不是一个对象。
关于如何正确测试的任何提示或示例?
【问题讨论】:
-
考虑使用正确的命名约定。您的枚举名称几乎无用。
in前缀是不需要的,因为 out 变量有一个特殊的指示符。 -
为什么它们几乎没用?我不明白,你为什么要提出一些我认为在我的情况下甚至对我没有帮助的东西?命名约定是我最不关心的;我这样命名它们是因为这是一个要求。
-
一个名字应该传达一个意思。你的名字不是这样的。我的评论旨在改善您的整体编码。我知道这并不能回答你的问题。这实际上是我将其发布为评论而不是答案的原因。
-
哦,好吧。是的,我知道关于正确命名约定的交易,我从大学时代就一直在练习。但是,假设我以这种方式命名我的变量类型和变量名称因为我的老板这么说。他想要的那些命名约定对我目前分配的项目有意义并且实际上是有意义的。精明? :)
-
好吧 :-)(我不会接受这样的命名约定,不管它们背后的原因是什么)
标签: c# unit-testing interface moq