Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Supports replacing public and private instance methods, static methods and properties without any profiler.
C#
branch: master

README.md

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);
}
Something went wrong with that request. Please try again.