2012-09-10 4 views
4

을 조롱하는 방법 :내가 단위 테스트에 내 뷰 모델에서 호출이 방법을 시도하고 DragEventArgs

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; 
    } 

나는이 방법이 Caliburn와 유선을. 거의 독창적으로 프레임 워크 클래스를 사용하는 아주 간단한 방법이라는 것을 알고 있지만 여전히 테스트가 필요하다고 생각합니다. 문제는 Moq이 DragEventArgs를 조롱 할 수 없다는 것입니다. 이 문제를 해결할 수있는 방법이 있습니까? 아니면이 방법을 테스트하는 데 신경 쓰지 않아도됩니까?

답변

3

바라건대 내가 Calibrun을 놓치지 않았 으면 좋겠지 만 왜 DragEventArgs을 만들 수 있습니까? 중요한 부분은 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)); 
} 
+4

공용 생성자가있는 System.Windows.Forms.DragEventArgs 용입니다. System.Windows.DragEventArgs (WPF)는 공개 봉인 클래스이며 공용 생성자가 없습니다. – Vili

+1

내부 생성자로 봉인 해 주셔서 감사합니다. 하나님은 우리의 코드를 단위 테스트 할 수 있어야합니다. –

2

DragEventArgs 클래스를 함수에서 사용하려는 데이터로 바꿉니다. DragEventArgs는 ViewModel이 아닌 UI에 속합니다.

관련 문제