Is it possible to create a mock from a class that doesn't provide a no-argument constructor and don't pass any arguments to the constructor? Maybe with creating IL dynamically?
The background is that I don't want to define interfaces only for testing. The workaround would be to provide a no-argument constructor for testing.
Sure thing. In this example i'll use Moq, a really awesome mocking library.
Example:
public class MyObject { public MyObject(object A, object B, object C) { // Assign your dependencies to whatever } } Mock<MyObject> mockObject = new Mock<MyObject>(); Mock<MyObject> mockObject = new Mock<MyObject>(null, null, null); // Pass Nulls to specific constructor arguments, or 0 if int, etc
In many cases though, I assign Mock objects as the arguments so I can test the dependencies:
Mock<Something> x = new Mock<Something>(); MyObject mockObject = new MyObject(x.Object); x.Setup(d => d.DoSomething()).Returns(new SomethingElse()); etc
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With