You can find an endless list of blogs, articles and websites promoting the benefits of unit testing your source code. It's almost guaranteed that the developers who programmed the compilers for Java, C++, C# and other typed languages used unit testing to verify their work.
So why then, despite its popularity, is testing absent from the syntax of these languages?
Microsoft introduced LINQ to C#, so why couldn't they also add testing?
I'm not looking to predict what those language changes would be, but to clarify why they are absent to begin with.
As an example: We know that you can write a for
loop without the syntax of the for
statement. You could use while
or if
/goto
statements. Someone decided a for
statement was more efficient and introduced it into a language.
Why hasn't testing followed the same evolution of programming languages?
Best Answer
As with many things, unit testing is best supported at the library level, not the language level. In particular, C# has numerous Unit Testing libraries available, as well as things that are native to the .NET Framework like
Microsoft.VisualStudio.TestTools.UnitTesting
.Each Unit Testing library has a somewhat different testing philosophy and syntax. All things being equal, more choices are better than less. If unit testing were baked into the language, you'd either be locked into the language designer's choices, or you'd be using... a library, and avoiding the language testing features altogether.
Examples
Nunit - General purpose, idiomatically-designed unit testing framework that takes full advantage of C#'s language features.
Moq - Mocking framework that takes full advantage of lambda expressions and expression trees, without a record/playback metaphor.
There are many other choices. Libraries like Microsoft Fakes can create "shims..." mocks that don't require you to write your classes using interfaces or virtual methods.
Linq isn't a language feature (despite it's name)
Linq is a library feature. We got a lot of new features in the C# language itself for free, like lambda expressions and extension methods, but the actual implementation of Linq is in the .NET Framework.
There's some syntactic sugar that was added to C# to make linq statements cleaner, but that sugar is not required to use linq.