Comments (3)
Hi, @FixRM. Sorry you're having a hard time.
I have never used dynamic
s so am not coming in with much experience, but it does seem that the dynamic
type of the value supplied to Returns
is causing the problem (not the type of CallerState
; I was surprised). I think dynamic
values infect things they touch. I was trying to write a test to reproduce your problem and FluentAssertions was also messed up: fake.CallerState.MyProp.Should().Be(42)
fails.
A little digging tells me that a well-known effect of using dynamic
is that you can no longer use extension methods on objects.
Anyhow, even before I dug, I found that
var fake = A.Fake<IHubCallerConnectionContext>();
dynamic state = new ExpandoObject();
state.MyProp = 42;
A.CallTo(() => fake.CallerState).Returns((object)state);
// I can even set and test the values later:
bool same1 = 42 == fake.CallerState.MyProp;
same1.Should().Be(true);
fake.CallerState.AnotherProp = 3;
bool same2 = 3 == fake.CallerState.AnotherProp;
same2.Should().Be(true);
works. It's not the most elegant, but I think is preferable to using ReturnsLazily
(you may not feel the same 😉).
I can try to look more later, but given the weirdness of dynamic
, I'm not sure we're going to get to a better "solution". If nothing else, there's probably an opportunity to improve the docs, though.
from fakeiteasy.
@blairconrad's explanation is correct. Basically, dynamic
messes up with extension methods. Just casting the value to object
is probably the easiest fix.
from fakeiteasy.
Casting to object - is genius! Thank you, guys.
from fakeiteasy.
Related Issues (20)
- Feature request: ReturnsNextFromSequenceLazily() HOT 6
- Feature request: Then().Returns...() HOT 5
- Issue using Result Pattern and trying to fake a response
- Release 8.0.1 HOT 1
- Interface type property not return created object HOT 3
- DoesNothing() and implicit creation options throws ArgumentException HOT 5
- Release 8.1.0 HOT 1
- Include README in NuGet package HOT 1
- Silence security vulnerability complaints over Microsoft.NETCore.App 2.1.0 HOT 2
- Release 8.2.0 HOT 1
- Fake does not work as argument constraint HOT 4
- Test fails on Version 8 but succeeds on Version 7 HOT 4
- Expose caught exception(s) in protected/abstract constructors HOT 10
- Invoke method after calling an Entities public method/behaviour HOT 7
- Release vNext
- Captured argument has empty Values HOT 6
- Document how to use InternalsVisibleTo from project files HOT 2
- InvokesAsync - possible? HOT 5
- Inconsistent results when verifying received calls HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fakeiteasy.