首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FakeItEasy:嘲弄MessageBox

FakeItEasy:嘲弄MessageBox
EN

Stack Overflow用户
提问于 2018-04-05 11:58:34
回答 1查看 83关注 0票数 0

我需要避免使用FakeItEasy框架对显示消息框的代码行进行(模拟)单元测试。

密码在这里,

代码语言:javascript
复制
public class XYZ
{
    public static int nValue = 0;

    public void AddInetegers(int i)
    {

        int j = i * 100;
        int k = j * 30 / 100;

        MessageBox.Show("Value Here {0}",  k.ToString());

        nValue = k;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-06 09:55:03

MessageBox.Show是一个静态成员,而不能被FakeItEasy伪造是一个静态成员。在这些情况下,通常访问非伪造服务的代码被隔离并包装在一个接口中。

我会这样做:

代码语言:javascript
复制
interface IAlerter
{
    void Alert(string text, string caption);
}

public class XYZ
{
    public static int nValue = 0;

    private readonly IAlerter _alerter;
    public XYZ(IAlerter alerter)
    {
        _alerter = alerter;
    }

    public void AddInetegers(int i)
    {

        int j = i * 100;
        int k = j * 30 / 100;

        _alerter.Show("Value Here {0}",  k.ToString());

        nValue = k;
    }
}

[TestMethod]
public void Test_Using_FakeItEasy()
{
    var alerter = A.Fake<IAlerter>();
    // No need to configure alerter.Alert(), since it doesn't return a value

    var xyz = new XYZ(alerter);
    xyz.AddInetegers(3);
    Assert.AreEqual(90, XYZ.nValue);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49671838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档