Giter Club home page Giter Club logo

Comments (5)

alexsimply avatar alexsimply commented on July 29, 2024

See this pull request for a quick implementation that adds basic compatibility with Code Contracts.

from moq4.

kzu avatar kzu commented on July 29, 2024

Does this build on SL or do we have conditionals in place?

from moq4.

varon avatar varon commented on July 29, 2024

Code Contracts should be fully support on the Silverlight platform. It compiles.

from moq4.

kzu avatar kzu commented on July 29, 2024

This doesn't compile or work on v3.5.

I'm reverting this change until that's figured out.

Thanks.

from moq4.

stakx avatar stakx commented on July 29, 2024

It would seem that since Moq no longer targets .NET 3.5 at all, that roadblock would be out of the way.

First, let me admit that while I've played around with Code Contracts it a few times over the years, I am not deeply familiar with it.

That being said, I fail to see how sprinkling a few Contract.Requires and Contract.Ensures is going to benefit any consumers of Moq.dll. Unless Moq is compiled with a CONTRACTS_FULL preprocessor symbol defined, those are simply stripped out by the compiler. And if Moq is compiled with CONTRACTS_FULL, then those method calls in the produced binary are going to produce runtime assertion errors unless Moq.dll is rewritten with ccrewrite as a post-compilation step. (Which also means that the Code Contracts tools need to be installed on all build machines, including the CI server.)

As far as I understand it, ccrewrite will perform static analysis on the Moq code base itself, based on the added contract blocks. If static analysis doesn't find any problems, the contract methods are removed. So again, we would end up with a Moq.dll without any embedded Code Contracts information that would be useful to the consumer. Code Contracts would only have been useful to Moq's own code base.

The once possible option I can see is to factor out the contract blocks into separate contract classes ([ContractClassFor(…)]) and not run ccrewrite on Moq.dll. Not sure whether this would be possible in all cases, such as for static methods like Mock.Of<T>.

Finally, and this is perhaps the final nail in the coffin, according to microsoft/CodeContracts#409 ("What does the Future of Code Contracts Look Like?"), development on Code Contracts has more or less ceased and it apparently isn't supported on .NET Core.

I will happily stand corrected if I have misunderstood anything in this issue or in the PR referred above (#95). Until that happens, I don't see how adding Code Contracts contract blocks would benefit Moq or its consumers, so I'm closing this issue for the time being.

from moq4.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.