我如何使用 FakeItEasy 伪造 returns 随着时间的推移不同答案的东西?
How can I fake something which returns different answers over time using FakeItEasy?
我正在尝试使用 FakeItEasy 伪造一个密封的外部音频源。
我已经包装了音频源并成功伪造了包装器,所以我知道基础知识是正确的。这是我目前坚持的一点:
音频源 returns 在使用 Play() 调用后 isPlaying = true。 isPlaying 将保持为 true,直到音频剪辑播放完毕,此时它将 return 变为 false。
我可以使用以下代码伪造第一部分:
A.CallTo(() => fakeAudioSourceWrapper.Play())
.Invokes(() => fakeAudioSourceWrapper.isPlaying = true)
在调用Play函数后成功假装isPlaying为真。我想做的是延迟一定时间,然后将其设置为 return false 以模拟剪辑播放完毕后发生的情况。
我试过了
A.CallTo(() => fakeAudioSourceWrapper.Play())
.Invokes(() => fakeAudioSourceWrapper.isPlaying = true)
.Then
.Invokes(() => fakeAudioSourceWrapper.isPlaying = false);
认为在调用 Play() 后第一次调用 isPlaying 时 return 为真,第二次 return 为假,但没有任何乐趣。
有办法吗?
如果 Play
被多次调用,您的解决方案可能会起作用,因为您正在配置 Play 的功能(尽管我认为您切换了 true 和 false)。我从问题中猜测 Play
只被调用了一次。在这种情况下,您希望 Play 执行将设置 changing behaviour between calls to isPlaying.
的操作
考虑这个通过测试中的方法,其中 Play
导致 isPlaying
到 return true
恰好一次(未配置 bool-returning 的默认行为Fake的方法是 return false
):
public interface IAudioSourceWrapper {
public bool isPlaying {get;set;}
public void Play();
}
[Fact]
public void PlayThenDoNotPlay()
{
var fakeAudioSourceWrapper = A.Fake<IAudioSourceWrapper>();
A.CallTo(() => fakeAudioSourceWrapper.Play())
.Invokes(() => {
A.CallTo(() => fakeAudioSourceWrapper.isPlaying).Returns(true).Once();
});
fakeAudioSourceWrapper.isPlaying.Should().Be(false);
fakeAudioSourceWrapper.Play();
fakeAudioSourceWrapper.isPlaying.Should().Be(true);
fakeAudioSourceWrapper.isPlaying.Should().Be(false);
}
我正在尝试使用 FakeItEasy 伪造一个密封的外部音频源。
我已经包装了音频源并成功伪造了包装器,所以我知道基础知识是正确的。这是我目前坚持的一点:
音频源 returns 在使用 Play() 调用后 isPlaying = true。 isPlaying 将保持为 true,直到音频剪辑播放完毕,此时它将 return 变为 false。
我可以使用以下代码伪造第一部分:
A.CallTo(() => fakeAudioSourceWrapper.Play())
.Invokes(() => fakeAudioSourceWrapper.isPlaying = true)
在调用Play函数后成功假装isPlaying为真。我想做的是延迟一定时间,然后将其设置为 return false 以模拟剪辑播放完毕后发生的情况。
我试过了
A.CallTo(() => fakeAudioSourceWrapper.Play())
.Invokes(() => fakeAudioSourceWrapper.isPlaying = true)
.Then
.Invokes(() => fakeAudioSourceWrapper.isPlaying = false);
认为在调用 Play() 后第一次调用 isPlaying 时 return 为真,第二次 return 为假,但没有任何乐趣。
有办法吗?
如果 Play
被多次调用,您的解决方案可能会起作用,因为您正在配置 Play 的功能(尽管我认为您切换了 true 和 false)。我从问题中猜测 Play
只被调用了一次。在这种情况下,您希望 Play 执行将设置 changing behaviour between calls to isPlaying.
考虑这个通过测试中的方法,其中 Play
导致 isPlaying
到 return true
恰好一次(未配置 bool-returning 的默认行为Fake的方法是 return false
):
public interface IAudioSourceWrapper {
public bool isPlaying {get;set;}
public void Play();
}
[Fact]
public void PlayThenDoNotPlay()
{
var fakeAudioSourceWrapper = A.Fake<IAudioSourceWrapper>();
A.CallTo(() => fakeAudioSourceWrapper.Play())
.Invokes(() => {
A.CallTo(() => fakeAudioSourceWrapper.isPlaying).Returns(true).Once();
});
fakeAudioSourceWrapper.isPlaying.Should().Be(false);
fakeAudioSourceWrapper.Play();
fakeAudioSourceWrapper.isPlaying.Should().Be(true);
fakeAudioSourceWrapper.isPlaying.Should().Be(false);
}