2

単純な RhinoMocks テストで設定した値が返されない理由を突き止めるために、1 日の大半を費やしました。本当に単純なものが欠けているだけだと確信していますが、それを理解することはできません。これが私のテストです:

    [TestMethod]
    public void CopyvRAFiles_ShouldCallCopyvRAFiles_ShouldReturnTrue2()
    {
        FileInfo fi = new FileInfo(@"c:\Myprogram.txt");
        FileInfo[] myFileInfo = new FileInfo[2];
        myFileInfo[0] = fi;
        myFileInfo[1] = fi;
        var mockSystemIO = MockRepository.GenerateMock<ISystemIO>();
        mockSystemIO.Stub(x => x.GetFilesForCopy("c:")).Return(myFileInfo);
        mockSystemIO.Expect(y => y.FileCopyDateCheck(@"c:\Myprogram.txt", @"c:\Myprogram.txt")).Return("Test");
        CopyFiles copy = new CopyFiles(mockSystemIO);

        List<string> retValue = copy.CopyvRAFiles("c:", "c:", new AdminWindowViewModel(vRASharedData));
        mockSystemIO.VerifyAllExpectations();
    }

SystemIO クラスのインターフェイスがあり、そのためのモックを CopyFiles クラスに渡します。FileCopyDatCheck メソッドに期待を設定し、Return("Test") する必要があると言っています。コードをステップ実行すると、代わりに null が返されます。私がここで見逃しているアイデアはありますか?

ここに私の CopyFiles クラスメソッドがあります:

    public List<string> CopyvRAFiles(string currentDirectoryPath, string destPath, AdminWindowViewModel adminWindowViewModel)
    {
        string fileCopied;
        List<string> filesCopied = new List<string>();
        try
        {
            sysIO.CreateDirectoryIfNotExist(destPath);

            FileInfo[] files = sysIO.GetFilesForCopy(currentDirectoryPath);

            if (files != null)
            {
                foreach (FileInfo file in files)
                {
                    fileCopied = sysIO.FileCopyDateCheck(file.FullName, destPath + file.Name);
                    filesCopied.Add(fileCopied);
                }
            }

            //adminWindowViewModel.CheckFilesThatRequireSystemUpdate(filesCopied);

            return filesCopied;
        }
        catch (Exception ex)
        {
            ExceptionPolicy.HandleException(ex, "vRAClientPolicy");
            Console.WriteLine("{0} Exception caught.", ex);

            ShowErrorMessageDialog(ex);
            return null;
        }
    }

「fileCopied」には、Expectによって設定された戻り値があると思います。GetFilesForCopy は、myFileInfo に 2 つのファイルを返します。助けてください。:)

前もって感謝します!

4

3 に答える 3

1

メソッドFileCopyDateCheckは本当に正確な文字列@"c:\Myprogram.txt"@"c:\Myprogram.txt"引数として呼び出されますか?

FileInfoで何かを行っているかどうかはわかりませんc:\。大文字C:\に変更されている可能性があります。これにより、期待が機能しなくなります。

たぶん、正確な引数値をチェックしない期待を試してください

mockSystemIO.Expect(y => y.FileCopyDateCheck(Arg<string>.Is.Anything, Arg<string>.Is.Anything)).Return("Test");

引数の制約の詳細については、Rhino Mocks 3.5、Argument Constraintsを参照してください。

期待値の大文字と小文字を区別しない可能性もあると確信しています。

于 2010-02-28T12:31:33.500 に答える
0

CopyvRAFiles() メソッドが仮想ではないためだと思います。

于 2010-03-23T01:28:44.443 に答える