"So, either I can only test the logic WITHOUT verify the arguments"
Why do you want to verify the argument?
Do you want to make sure it's valid?
Is it part of the logic?
Are there many calls to this method and you want to make sure that it was called with a specific arg?
If you don't care about the references of the argument to equal, you can override the Equals method of your argument's Type e.g.
public class Foo
{
public override bool Equals(System.Object obj)
{
var foo = obj as Foo;
if (foo == null)
{
return false;
}
return this.ToString() == foo.ToString();
}
}
[TestMethod]
public void Privates_Statics_AndVerifications()
{
//Arrange
Isolate.NonPublic.WhenCalled<UnderTest>("privateStaticFunc").IgnoreCall();
var fakeFoo = Isolate.Fake.AllInstances<Foo>();
Isolate.WhenCalled(() => fakeFoo.Equals(null)).CallOriginal();
//Act
UnderTest.PublicStaticFunc();
//Assert
Isolate.Verify.NonPublic.WasCalled(typeof(UnderTest), "privateStaticFunc").WithArguments(fakeFoo);
}
Let me know if this helps.