0

割り当て操作は、オブジェクトがを使用してインスタンス化されてnullいる場合でも割り当てますFPositionnew

public void SetPosition(IPositionCollector aCollector_in, Vector3d aVector_in)
{
    FPosition aPosition = new FPosition
    {
        CoordinateX = aVector_in.X,
        CoordinateY = aVector_in.Y,
        CoordinateZ = aVector_in.Z
    };

    aCollector_in.Position = aPosition; // assigns null 
}

私はMOQを使用してIPositionCollectorおり、MOQプロキシオブジェクトです。

どのようなシナリオでそれが可能ですか?MOQオブジェクトにいくつかの依存関係を設定する必要がありますか?

getitngを使用した後、SetupAllProperties次の例外が発生します。

at Moq.MethodCall..ctor(Mock mock, Expression originalExpression, MethodInfo method, Expression[] arguments)
at Moq.MethodCallReturn`2..ctor(Mock mock, Expression originalExpression, MethodInfo method, Expression[] arguments)
at Moq.Mock.<>c__DisplayClass15`2.<SetupGet>b__14()
at Moq.PexProtector.Invoke[T](Func`1 function)
at Moq.Mock.SetupGet[T1,TProperty](Mock mock, Expression`1 expression)
at Moq.Mock`1.SetupGet[TProperty](Expression`1 expression)
4

3 に答える 3

1

動作の一部を確認する必要があると思います。コレクターに正しい位置オブジェクトが割り当てられているかどうかを確認してください。

// Arrange
var collectorMock = new Mock<IPositionCollector>();
var position = new FPosition
{
    CoordinateX = vector.X,
    CoordinateY = vector.Y,
    CoordinateZ = vector.Z
};
// Act
sut.SetPosition(collectorMock.Object, vector)
// Assert
collectorMock.VerifySet(c => c.Position = position);

ところでFPosition、Equalsを実装する必要があります

または、FPositionEqualsを実装せず、Equalsを実装したくない場合

// Arrange
var collectorMock = new Mock<IPositionCollector>();
// Act
sut.SetPosition(collectorMock.Object, vector)
// Assert    
collectorMock.VerifySet(c => c.Position = It.Is<FPosition>(p => 
    p.CoordinateX == vector.X &&
    p.CoordinateY == vector.Y &&
    p.CoordinateZ == vector.Z));
于 2013-01-22T06:48:27.257 に答える
1

試してみてくださいSetupAllProperties()

var mock = new Mock<IPositionCollector>();
mock.SetupAllProperties();
SetPosition(mock.Object, theVector);
于 2013-01-22T06:38:44.937 に答える
0

DefaultValue問題をMock解決するための設定。

aPositionCollectorMock.DefaultValue = DefaultValue.Mock;

そして、への呼び出しを削除しましたSetupAllProperties()

于 2013-01-23T11:51:39.770 に答える