Comments (5)
It would seem libraries like Moq use the following syntax.
mock.Setup(x => x.DoSomething(It.IsAny<string>())).Returns((string s) => s.ToLower());
This is contrary to the fluent API. Also doesn't seem possible with the fluent API design.
Anyone have any thoughts on how this could be implemented?
from delphi-mocks.
It's not the best approach but you can realize something like this:
mockVisitor.Setup.Expect.Once.When.Visit(Is<IElement>.Any<IVisitor>)
IElement = T
IVisitor = U
The "Is.Any"-Function could return an object that implements "T" (IElement) and another interface like:
IParameterFilter<U> = interface
....
function ParameterMatch(parameter: U): boolean;
...
end;
The class could look like:
TParameterFilter<T, U> = class(TVirtualInterface, IParameterFilter)
...
function ParameterMatch(parameter: U): boolean;
function Instance: T;
...
end;
The class should implement "T" via the virtual Interface class (so an instance of this class could be passed to the setup-Call of your method):
On finding a behavior, you could check if the behavior-parameter supports the filter-interface, execute it with the methods-parameter as parameter for "ParameterMatch" and if it returns true, use this behavior.
I hope it's clear what I mean.
from delphi-mocks.
Another idea for the syntax of the fluent API:
Is.Any.WhichSupports
In this way, the Is.Any-Returns the IParameterFilter-Interface directly an every call of IParameterFilter returns a "U" (IElement).
Unfortunately with this solution it's not possible to call "Is.Any" since Is.Any returns an IParameterFilter - not "T". So you need to write "Is.Any.All" or something like that.
from delphi-mocks.
Could you not handle it slightly differently, like the following:
mockVisitor.Setup.Expect.Once.WhenAny.Visit
When I need to test a method is called, I write this as
mockVisitor.Setup.ExpectExactly( 'Visit', 1)
from delphi-mocks.
Closing since we've not been able to implement this in any usable way.
from delphi-mocks.
Related Issues (20)
- Some questions rather than an issue HOT 3
- Get rid of W1029 warning in Delphi compile mode HOT 4
- Need research if IStubSetup<T> can benefit from an overloaded method function WillReturn<TReturn>(const value : TReturn) : IWhen<T>; overload; HOT 2
- Memory leak there should not have memory leak HOT 2
- Typos in Sample1Main.pas HOT 1
- Status of Delphi XE support HOT 2
- Mocking an empty interface HOT 2
- TObjectProxy.Destroy raises "Invalid pointer operation". HOT 1
- Typo on Delphi.Mocks.Proxy.pas
- Some units have (apparently unnecessarily) Windows in the uses clause HOT 3
- Mock Objects HOT 1
- Remove copy of VSoft.WeakReference and use dpm package
- [discussion] Delphi Mock documentation HOT 7
- TMock<IMyInterface>.MyMethod(X) leads to access violation when X is a record type HOT 3
- Test fails with current version of Mocks, passes with old version HOT 2
- Calling virtual method with defined behavior can cause problems HOT 2
- Example code does not work HOT 1
- Not able to define behaviour for overloaded functions with different parameters. HOT 1
- WillReturn for public class property with private getter HOT 4
- Call to actual class method when mocking class with a non-virtual method HOT 1
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 delphi-mocks.