I m trying to enable shims in my testing via Microsoft Fakes by following this article:
However, instead of using .Net Framework 4.8 as mentioned I need to make it work for current .Net versions so I created a project with .NET 6.0.
I created MSTest project and added Fakes assemblies (added for both System and System.IO), and included this code, as per the article above:
public void TestFileReadAllLine()
{
using (ShimsContext.Create())
{
// Arrange
System.IO.Fakes.ShimFile.ReadAllLinesString = (s) => new string[] { "Hello", "World", "Shims" };
}
}
The problem is that I simply cannot compile it. The compiler error is:
Error CS0234 The type or namespace name 'Fakes' does not exist in the namespace 'System.IO' (are you missing an assembly reference?).
The article doesn't mention that any additional assembly references needed to be added (besides adding fakes assemblies).
Am I missing something? Did something change in this usage for current .Net versions?
Edit:
I also tried to build the same project using .NET 5.0 and .NET Core 3.1. In this case I got the compiler error that
ShimFileis not found. By trial and error, I found that adding Fakes Assembly toSystem.IO.FileSystemfixes this (my guess isSystem.RuntimeFakes Assembly should remain as well).So it seems that because the structure of system assemblies changed, it might take some trial and error to get different Fakes APIs to work (unless there are some docs on this that I couldn't find).
Original answer:
I found an answer here:
https://learn.microsoft.com/en-us/answers/questions/1165722/why-i-cant-fake-mock-system-in-net-core-6-0(vs-ent
Basically, just need to add Fakes Assembly to
System.Runtimeinstead of System or System.IO. After that it works.