Moq Verify Expression - PullRequest
       1

Moq Verify Expression

1 голос
/ 27 января 2012

Добрый день,

У меня есть класс, который выполняет поиск в реестре, чтобы определить, где установлено приложение (на 64-разрядной машине).

Я пишу модульный тест, пытаясь это проверить, и вот что у меня есть:

[Test, Explicit]
public void Validate64Bit()
{
    wsMock.Setup(x => x.IsInstalled).Returns(true);
    wsMock.Setup(x => x.Path).Returns(@"C:\Program Files (x86)\DIRP\");

    IWorkstationLocator workstationLocator = new WorkstationLocator();
    string workstationInstallationPath = workstationLocator.Path;

    Assert.That(workstationInstallationPath != string.Empty, "The install path should exist.");
    wsMock.Verify(x => x.Path == workstationInstallationPath, 
        "64-bit Workstation Install Path should match:  " + @"C:\Program Files (x86)\DIRP\");
    }

Но я получаю сообщение об ошибке:

System.ArgumentException: выражение не является вызовом метода: x => x.Path == .workstationInstallationPath

Итак, мой вопрос: я хочу проверить, x.Path == wrokstationInstallationPath.

Как бы я это сделал в методе .Verify ()?

Или мне лучше использовать Assert?

ТИА

Coson

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Moq's Verify обычно используется для проверки того, что был вызван определенный метод.Например,

// Verify with custom error message for failure
mock.Verify(foo => foo.Execute("ping"), "When doing operation X, the service should be pinged always");

Если вы тестируете этот x.Path == workstationInstallationPath, вы на самом деле просто утверждаете, что оба значения одинаковы, а не проверяете, было ли установлено какое-либо из вызовов метода.

2 голосов
/ 27 января 2012

Здесь вам не нужно использовать макет.

Ваш sut выглядит как класс WorkstationLocator, и все, что вы проверяете, это то, что свойство Path равнок определенному значению.

Вы можете просто сделать:

[Test, Explicit]
public void Validate64Bit()
{
    var expectedPath = @"C:\Program Files (x86)\DIRP\";

    IWorkstationLocator workstationLocator = new WorkstationLocator();

    Assert.AreEqual(expectedPath, workstationLocator.Path, 
        "64-bit Workstation Install Path should match:  " + expectedPath);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...