MReplace
MReplace copied to clipboard
Supports replacing public and private instance methods, static methods and properties without any profiler.
MReplace
Supports replacing public and private instance methods, static methods and properties without any profiler. I use Ziad Elmalki's technique for the replacing of two MethodBase objects (http://www.codeproject.com/Articles/37549/CLR-Injection-Runtime-Method-Replacer).
[TestMethod]
public void Replace_StaticMethod()
{
Assert.AreEqual(2, ClassUnderTest2.StaticMethod2());
using (Replace.Method(() => ClassUnderTest2.StaticMethod2()).With(() => ClassUnderTest1.StaticMethod1()))
{
Assert.AreEqual(1, ClassUnderTest2.StaticMethod2());
}
Assert.AreEqual(2, ClassUnderTest2.StaticMethod2());
}
[TestMethod]
public void Replace_InstanceMethod()
{
var tc = new ClassUnderTest2();
Assert.AreEqual(2, tc.Method2());
using (Replace.Method<ClassUnderTest2>(c => c.Method2()).With<ClassUnderTest1>(c => c.Method1()))
{
Assert.AreEqual(1, tc.Method2());
}
Assert.AreEqual(2, tc.Method2());
}
[TestMethod]
public void Replace_PrivateInstanceMethod()
{
var tc = new ClassUnderTest2();
Assert.AreEqual(2, tc.CallPrivateMethod2());
using (Replace.Method<ClassUnderTest2>("PrivateMethod2").With<ClassUnderTest1>("PrivateMethod1"))
{
Assert.AreEqual(1, tc.CallPrivateMethod2());
}
Assert.AreEqual(2, tc.CallPrivateMethod2());
}
[TestMethod]
public void Replace_StaticProperty()
{
Assert.AreEqual(2, ClassUnderTest2.StaticProperty2);
using (Replace.Property(() => ClassUnderTest2.StaticProperty2).With(() => ClassUnderTest1.StaticProperty1))
{
Assert.AreEqual(1, ClassUnderTest2.StaticProperty2);
}
Assert.AreEqual(2, ClassUnderTest2.StaticProperty2);
}
[TestMethod]
public void Replace_InstanceProperty()
{
var tc = new ClassUnderTest2();
Assert.AreEqual(2, tc.Property2);
using (Replace.Property<ClassUnderTest2>(c => c.Property2).With<ClassUnderTest1>(c => c.Property1))
{
Assert.AreEqual(1, tc.Property2);
}
Assert.AreEqual(2, tc.Property2);
}