5

ViewModel から呼び出されるこのメソッドを単体テストしようとしています。

  public virtual string[] ExtractFilePaths(DragEventArgs dragEventArgs)
  {
     string[] droppedPaths = null;

     if (dragEventArgs.Data.GetDataPresent(DataFormats.FileDrop))
     {
        droppedPaths = dragEventArgs.Data.GetData(DataFormats.FileDrop, true) as string[];
     }

     return droppedPaths;
  }

私はこの方法をカリバーンと結びつけました。ほとんどフレームワーク クラスのみを使用する非常に単純な方法であることはわかっていますが、まだテストが必要だと感じています。問題は、Moq が DragEventArgs をモックできないことです。これを回避する方法はありますか、それともこの方法をテストする必要はありませんか?

4

2 に答える 2

4

Calibrun に欠けているものがないことを願っていますが、CalibrunDragEventArgsを作成できるのに、なぜモックを作成する必要があるのでしょうか? 重要な部分はIDataObject、インターフェイスであり、簡単にモックできる部分です。

[Test]
public void ExtractFilePaths_WithFileDrop_ReturndDropPaths()
{
    var fileList = new[] {@"c:\path\path\file1.txt", @"d:\path2\path2\file2.txt"};
    var stubData = Mock.Of<IDataObject>(x =>
                                        x.GetDataPresent(DataFormats.FileDrop) == true &&
                                        x.GetData(DataFormats.FileDrop, true) == fileList);

    var dragEventArgs = new DragEventArgs(stubData, 0, 0, 0, DragDropEffects.Move, DragDropEffects.Scroll);

    var subject = new Subject();

    // Act
    var result = subject.ExtractFilePaths(dragEventArgs);

    // Assert
    Assert.That(result, Is.Not.Null, "Expected array to be returned");
    Assert.That(result, Is.EquivalentTo(fileList));
}
于 2012-10-25T07:40:59.300 に答える
2

DragEventArgs クラスを、関数で使用するデータのみに置き換えます。DragEventArgs は、ViewModel ではなく UI に属します。

于 2012-11-16T10:37:49.843 に答える