标签: fakeiteasy

假货比Mocks好吗?

我偶然发现了这个开源项目Fake It Easy,我不得不承认,它看起来非常有趣,但是我怀疑,FIE假货和Moq Mocks有什么区别?有没有更好的特定用途?

编辑:

这个新框架能比Moq更好吗?

c# unit-testing mocking fakeiteasy

49
推荐指数
3
解决办法
1万
查看次数

使用FakeItEasy的Out和Ref参数

我有一个方法,其out参数返回许多记录.我想知道如何用FakeItEasy来嘲笑它.

.net c# tdd mocking fakeiteasy

25
推荐指数
1
解决办法
4375
查看次数

如何使用FakeItEasy访问Returns()中的参数值?

我有一个工厂接口,用于创建一些数据对象.

interface IFactory
{
    IData Create (string name, string data);
}

interface IData
{
    // ....
}

class Data : IData
{
    public Data (string name, string data)
    {
        // .....
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要创建一个模拟工厂来传递给另一个模块,这个模块将使用这个模拟来创建数据.

简单来说,一个简单的模块如下所示:

class QuickModule
{
    private readonly IFactory _factory;

    public QuickModule (IFactory factory)
    {
        _factory = factory;
    }

    public IEnumerable<IData> GetData ()
    {
        yield return _factory.Create ("name1", "abc");
        yield return _factory.Create ("name2", "def");
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,工厂被调用两次,有两组参数.

使用Moq,这很容易:

var factoryMock = new Mock<IFactory> ();
factoryMock.Setup (x => x.Create …
Run Code Online (Sandbox Code Playgroud)

c# fakeiteasy

23
推荐指数
1
解决办法
4788
查看次数

指定的对象不会被识别为伪对象.问题

我遇到一个问题,即在一个非常简单的测试中FakeItEasy调用失败并出现错误"指定的对象未被识别为伪对象".电话很简单:

A.CallTo(myService.MyMethod(listOfStringsFilter)).MustHaveHappened();
Run Code Online (Sandbox Code Playgroud)

假的同样简单(A.Fake()),并用一个方法伪造一个interofance,它接受一个列表并返回一个列表.在调试模式下,我看到myService的实例是{Fake IMyInterface}类型.无论如何,这个问题真的让我感动,感谢您的帮助.

更新:

这是我自己的错误,我需要打电话说:

A.CallTo(() => myService.MyMethod(listOfStringsFilter)).MustHaveHappened(); 
Run Code Online (Sandbox Code Playgroud)

tdd nunit fakeiteasy c#-4.0

15
推荐指数
1
解决办法
2813
查看次数

如何测试使用xUnit,SubSpec和FakeItEasy抛出的异常

我正在使用xUnit,SubSpec和FakeItEasy进行单元测试.到目前为止,我已经创建了一些积极的单元测试,如下所示:

"Given a Options presenter"
    .Context(() =>
        presenter = new OptionsPresenter(view,
                                         A<IOptionsModel>.Ignored,
                                         service));

"with the Initialize method called to retrieve the option values"
    .Do(() => 
        presenter.Initialize());

"expect the view not to be null"
    .Observation(() =>
        Assert.NotNull(view));

"expect the view AutoSave property to be true"
    .Observation(() => Assert.True(view.AutoSave));
Run Code Online (Sandbox Code Playgroud)

但是现在我想写一些负面单元测试并检查某些方法是否被调用,并抛出异常

例如

"Given a Options presenter"
    .Context(() =>
        presenter = new OptionsPresenter(view,
                                         A<IOptionsModel>.Ignored,
                                         service));

"with the Save method called to save the option values"
    .Do(() => 
        presenter.Save());

"expect an ValidationException to be thrown" …
Run Code Online (Sandbox Code Playgroud)

c# bdd unit-testing xunit fakeiteasy

14
推荐指数
3
解决办法
9479
查看次数

如何验证使用特定类型的参数调用方法

我需要验证是否使用特定类型的对象调用了方法

这是我想测试它被调用的方法的接口:

interface IPlayer
{
   void Send(object message);
}
Run Code Online (Sandbox Code Playgroud)

考试:

var player1 = A.Fake<IPlayer>();
room.AddPlayer(player1);

room.DoSomething();

A.CallTo(() => player1.Send(A<Type1>.Ignored)).MustHaveHappened();
Run Code Online (Sandbox Code Playgroud)

因为player1.Send我得到了很多不同对象的多次调用InvalidCastException

谁知道如何正确地做到这一点?

fakeiteasy

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

在FakeItEasy中使用的假人是什么?

什么是Dummy用于FakeItEasy?它与A.Fake或A.​​Ignored有何不同?

谢谢 :-)

c# mocking fakeiteasy

13
推荐指数
2
解决办法
2129
查看次数

使用FakeItEasy,如何在假冒的属性上设置值?

使用FakeItEasy,我试图捕获假对象上的属性值的设置:

首先是界面:

interface ISomeInterface
{
    int MyProperty {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后是单元测试的一个片段:

var myObject = A.Fake<ISomeInterface>();

int saved = 0;
A.CallTo (() => myObject.MyProperty).Invokes (x => saved = ?????);

SomeMethod (myObject);
Assert.That (saved, Is.EqualTo (100));
Run Code Online (Sandbox Code Playgroud)

而且有

void SomeMethod (ISomeInterface intf)
{
    intf.MyProperty = 100;
}
Run Code Online (Sandbox Code Playgroud)

我不知道要替换什么?????

c# mocking fakeiteasy

13
推荐指数
1
解决办法
7001
查看次数

使用FakeItEasy的假通用方法,无需指定类型

我想知道是否有人可以为所有可能的类型(或指定的子类型)伪造泛型方法调用?

例如,假设我们有这个美妙的IBar界面.

public interface IBar
{
    int Foo<T>();    
}
Run Code Online (Sandbox Code Playgroud)

我可以伪造一个依赖于这个IBar的Foo调用,而不必指定T是任何特定类型吗?

[TestFixture]
public class BarTests
{
    [Test]
    public void BarFooDoesStuff()
    {
        var expected = 9999999;
        var fakeBar = A.Fake<IBar>();

        A.CallTo(() => fakeBar.Foo<T>()).Returns(expected);

        var response = fakeBar.Foo<bool>();

        Assert.AreEqual(expected, response);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# generics fakeiteasy

11
推荐指数
1
解决办法
3365
查看次数

为什么FakeItEasy会抛出此异常,为什么要使方法虚拟修复呢?

我有一个测试(代码如下)来测试Method1调用Method2.我得到的例外是

当前代理生成器无法拦截指定的方法,原因如下: - 无法拦截密封方法.

被测方法本身并未密封.但是,它确实依赖于密封类(第三方类,我在创建包装器时遇到了麻烦,以便正确地模拟它 - 另一个问题的另一个主题).无论哪种方式,在这一点上,我并不是要求FakeItEasy嘲笑密封的班级.在调试我的测试时,当调用依赖项时,我可以清楚地看到正在生成一个真实的对象,而不是假的.

然而,鉴于错误信息,我觉得它可能会以某种方式相关.

此外,我通过随机博客文章发现,使方法虚拟修复问题,允许测试通过.我试了一下它就有效了.但我不明白为什么它修复它,而且无论如何,保持方法虚拟对我没有意义.就我而言,被测试的班级没有自己的孩子,即; 没有孩子覆盖它的方法,所以我看不出有任何理由让它成为虚拟的.

我错误地认为我没有理由让这个方法成为虚拟的吗?
是FakeItEasy以某种方式试图嘲笑密封的班级?

我真的不确定如何进行这项测试.

我的测试

[SetUp]
public void SetUp()
{
    // Arrange
    _service2 = A.Fake<Service2>(x => x.WithArgumentsForConstructor(
                                        () => new Service2()));
    _service1 = A.Fake<Service1>(x => x.WithArgumentsForConstructor(
                                        () => new Service1(_service2)));
}

[Test]
public void when_Method1_executes_it_calls_Method2()
{
    // Act
    result = _service1.Method1();

    // Assert
     A.CallTo(() => _service2.Method2())
                                   .WithAnyArguments()
                                   .MustHaveHappened();
}
Run Code Online (Sandbox Code Playgroud)


相关方法

public class Service1 : IService1
{
    private readonly IService2 _service2;
    public Service1(IService2 service2) …
Run Code Online (Sandbox Code Playgroud)

c# testing asp.net-mvc fakeiteasy

11
推荐指数
2
解决办法
7619
查看次数

标签 统计

fakeiteasy ×10

c# ×8

mocking ×4

tdd ×2

unit-testing ×2

.net ×1

asp.net-mvc ×1

bdd ×1

c#-4.0 ×1

generics ×1

nunit ×1

testing ×1

xunit ×1