标签: moq

使用Moq验证特定参数

public void SubmitMessagesToQueue_OneMessage_SubmitSuccessfully()
{
    var messageServiceClientMock = new Mock<IMessageServiceClient>();
    var queueableMessage = CreateSingleQueueableMessage();
    var message = queueableMessage[0];
    var xml = QueueableMessageAsXml(queueableMessage);
    messageServiceClientMock.Setup(proxy => proxy.SubmitMessage(xml)).Verifiable();
    //messageServiceClientMock.Setup(proxy => proxy.SubmitMessage(It.IsAny<XmlElement>())).Verifiable();

    var serviceProxyFactoryStub = new Mock<IMessageServiceClientFactory>();
    serviceProxyFactoryStub.Setup(proxyFactory => proxyFactory.CreateProxy()).Returns(essageServiceClientMock.Object);
    var loggerStub = new Mock<ILogger>();

    var client = new MessageClient(serviceProxyFactoryStub.Object, loggerStub.Object);
    client.SubmitMessagesToQueue(new List<IMessageRequestDTO> {message});

    //messageServiceClientMock.Verify(proxy => proxy.SubmitMessage(xml), Times.Once());
    messageServiceClientMock.Verify();
}
Run Code Online (Sandbox Code Playgroud)

我开始使用Moq并且有点挣扎.我正在尝试验证messageServiceClient是否正在接收正确的参数,这是一个XmlElement,但我找不到任何方法使它工作.它仅在我不检查特定值时才有效.

有任何想法吗?

部分答案:我找到了一种方法来测试发送给代理的xml是否正确,但我仍然认为这不是正确的方法.

public void SubmitMessagesToQueue_OneMessage_SubmitSuccessfully()
{
    var messageServiceClientMock = new Mock<IMessageServiceClient>();
    messageServiceClientMock.Setup(proxy => proxy.SubmitMessage(It.IsAny<XmlElement>())).Verifiable();
    var serviceProxyFactoryStub = new Mock<IMessageServiceClientFactory>();
    serviceProxyFactoryStub.Setup(proxyFactory => proxyFactory.CreateProxy()).Returns(messageServiceClientMock.Object);
    var loggerStub …
Run Code Online (Sandbox Code Playgroud)

c# nunit unit-testing moq

150
推荐指数
3
解决办法
10万
查看次数

Moq:如何获取传递给模拟服务方法的参数

想象一下这堂课

public class Foo {

    private Handler _h;

    public Foo(Handler h)
    {
        _h = h;
    }

    public void Bar(int i)
    {
        _h.AsyncHandle(CalcOn(i));
    }

    private SomeResponse CalcOn(int i)
    {
        ...;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mo(q)cking Handler在Foo的测试中,我怎样才能检查Bar()传递给了_h.AsyncHandle什么?

c# moq

149
推荐指数
7
解决办法
7万
查看次数

没有指定输入参数的Moq模拟方法

我在使用Moq的测试中有一些代码:

public class Invoice
{
    ...

    public bool IsInFinancialYear(FinancialYearLookup financialYearLookup)
    {
        return InvoiceDate >= financialYearLookup.StartDate && InvoiceDate <= financialYearLookup.EndDate;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以在单元测试中我试图模拟这个方法并让它返回true

mockInvoice.Setup(x => x.IsInFinancialYear()).Returns(true);
Run Code Online (Sandbox Code Playgroud)

无论如何都要写这行,所以我不必指定输入IsInFinancialYear.即.所以它在代码中没有输入参数是什么,它将返回true传递给它的什么?

c# moq mocking

125
推荐指数
3
解决办法
5万
查看次数

使用Moq验证方法调用

我对C#中的单元测试相当新,并且学习使用Moq.以下是我要测试的课程.

class MyClass
{
    SomeClass someClass;
    public MyClass(SomeClass someClass)
    {
        this.someClass = someClass;     
    }

    public void MyMethod(string method)
    {
        method = "test"
        someClass.DoSomething(method);
    }   
}

class Someclass
{
    public DoSomething(string method)
    {
        // do something...
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我的TestClass:

class MyClassTest
{
    [TestMethod()]
    public void MyMethodTest()
    {
        string action="test";
        Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
        mockSomeClass.SetUp(a => a.DoSomething(action));
        MyClass myClass = new MyClass(mockSomeClass.Object);
        myClass.MyMethod(action);
        mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>()));
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

Expected invocation on the mock at least once, but was never performed …
Run Code Online (Sandbox Code Playgroud)

c# testing methods moq

117
推荐指数
1
解决办法
14万
查看次数

Moq中Verifiable()的目的是什么?

目的是Verifiable()什么?

如果我验证Mock并将其保留,它仍会验证SetUp.

编辑:我正在使用VerifyAll()因此验证一切的原因.更改为Verify()只有我的.Verifiable() SetUps被检查.

moq

115
推荐指数
2
解决办法
4万
查看次数

如何使用moq模拟ConfigurationManager.AppSettings

我陷入了这个代码,我不知道如何模拟:

ConfigurationManager.AppSettings["User"];
Run Code Online (Sandbox Code Playgroud)

我必须模拟ConfigurationManager,但我没有线索,我正在使用Moq.

有人可以给我一个提示吗?谢谢!

c# unit-testing moq

115
推荐指数
5
解决办法
6万
查看次数

Moq:非可覆盖成员的设置无效:x => x.GetByTitle("asdf")

不知道如何解决这个问题,尝试对方法"GetByTitle"进行单元测试

以下是我的定义:

public class ArticleDAO :  GenericNHibernateDAO(IArticle, int>, IArticleDAO
{
    public IArticle GetByTitle(string title)
    {
        IQuery query = Session.CreateQuery("...")
        return query.UniqueResult<IArticle>();
    }
}

public interface IArticleDAO
{
    IArticle GetByTitle(string title);
}
Run Code Online (Sandbox Code Playgroud)

单元测试:

[Test]
public void can_load_by_title()
{
    _mockDaoFactory.Setup(x => x.GetArticleDao())
                                .Returns(_mockArticleDao.Object);
    _mockArticleDao.Setup(x => x.GetByTitle("some title"))
                                .Returns(article1.Object);

    _articleManager.LoadArticle("some title");

    Assert.IsNotNull(_articleManager.Article);
}
Run Code Online (Sandbox Code Playgroud)

运行测试给出了错误:

System.ArgumentException: Invalid setup on a non-overridable member:
x => x.GetByTitle("some title")
Run Code Online (Sandbox Code Playgroud)

更新

[Setup]看起来像:

[Setup]
public void SetUp()
{
     _mockDaoFactory = new Mock<IDaoFactory>();
     _mockArticleDao = new Mock<ArticleDao>();

     _articleManager …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate resharper nunit moq

108
推荐指数
1
解决办法
7万
查看次数

如何在没有明确指定或使用重载的情况下在其签名中具有可选参数的方法?

给出以下界面:

public interface IFoo
{
    bool Foo(string a, bool b = false);
}
Run Code Online (Sandbox Code Playgroud)

试图用Moq模拟它:

var mock = new Mock<IFoo>();
mock.Setup(mock => mock.Foo(It.IsAny<string>())).Returns(false);
Run Code Online (Sandbox Code Playgroud)

在编译时出现以下错误:

表达式树可能不包含使用可选参数的调用或调用

我发现上面的问题是Moq问题列表中的一个增强,它似乎被分配到4.5版本(无论何时).

我的问题是:鉴于上述内容不会很快得到解决,我该怎么办?我的选项是否只是在每次模拟它时显式设置可选参数的默认值(哪种类型在第一时间指定一个失败)或创建没有bool的重载(就像我会做的那样)在C#4之前)?

或者有没有人遇到过更聪明的方法来克服这个问题?

c# unit-testing moq

108
推荐指数
3
解决办法
5万
查看次数

如何使用Moq验证方法是否只调用一次?

如何使用Moq验证方法是否只调用一次?在Verify()Verifable()东西实在是令人困惑的.

.net moq mocking

104
推荐指数
2
解决办法
5万
查看次数

如何使用Moq在ASP.NET MVC中模拟HttpContext?

[TestMethod]
public void Home_Message_Display_Unknown_User_when_coockie_does_not_exist()
{
    var context = new Mock<HttpContextBase>();
    var request = new Mock<HttpRequestBase>();
    context
        .Setup(c => c.Request)
        .Returns(request.Object);
    HomeController controller = new HomeController();

    controller.HttpContext = context; //Here I am getting an error (read only).
    ...
 }
Run Code Online (Sandbox Code Playgroud)

我的基本控制器有一个重写的Initialize,它得到了这个requestContext.我试图通过这个,但我没有做正确的事情.

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
}
Run Code Online (Sandbox Code Playgroud)

在哪里可以获得有关使用Moq模拟我的RequestContext和HttpContext的更多信息?我正在尝试模拟cookie和一般上下文.

c# asp.net-mvc moq mocking httpcontext

97
推荐指数
5
解决办法
6万
查看次数