在 FakeItEasy 的通用接口上伪造惰性输出参数值?

问题描述 投票:0回答:1

我有一个通用的 C# 接口,我正在尝试使用 FakeItEasy 来模拟它,以进行如下所示的 xUnit 测试:

    #region FakeItEasyDebugging
    public interface IFakeTest<T> : IDisposable where T : new()
    {
        /// <summary>
        ///     Gets data.
        /// </summary>
        /// <param name="key">Data key</param>
        /// <param name="data">Data from database, null if not found</param>
        /// <returns>Returns True if found</returns>
        bool GetData(string key, out T data);
    }

    public class TestClass
    {
        public int Foo { get; set; } = 0;
    }

    public class FakeTest
    {
        [Fact]
        public void TestFakeItEasy()
        {
            const string testKey = "some";

            IFakeTest<TestClass> testObj = A.Fake<IFakeTest<TestClass>>();
            A.CallTo(() => testObj.GetData(testKey, out data)).Returns(true).AssignsOutAndRefParameters(new TestClass());

        }
    }

    #endregion

但是,尽管它看起来很像文档指示我做的事情,但这不起作用:

https://fakeiteasy.github.io/docs/8.0.0/assigning-out-and-ref-parameters/

我收到的错误消息是 CS0103:名称“数据”在当前上下文中不存在。

我也没有从 Visual Studio 得到任何有用的建议。

那么,我应该如何编写 CallTo 行才能使其真正工作并指定模拟 IFakeTest.GetData 方法的行为方式?

    A.CallTo(() => testObj.GetData(testKey, out TestClass data)).Returns(true).AssignsOutAndRefParameters(new TestClass());

产生CS8198。

    A.CallTo(() => testObj.GetData(testKey, out TestClass)).Returns(true).AssignsOutAndRefParameters(new TestClass());

产生CS0118。

.net xunit fakeiteasy
1个回答
0
投票

正如您所注意到的,编译器向您抱怨,因为您没有在任何地方定义

data
。无论是否使用 FakeItEasy,如果不声明
GetData(testKey, out data)
data
都不会编译。

TestClass data;
A.CallTo(() => testObj.GetData(testKey, out data)).Returns(true).AssignsOutAndRefParameters(new TestClass());
© www.soinside.com 2019 - 2024. All rights reserved.