I'm starting to using Moles in unit tests and am struggling a little with documentation.
I want to mole DateTime.Now.
If you look around the old way of doing this was to add a reference to mscorlib, then add a stubx file for it (Add New Item -> Stubs And Moles For Testing).
The 'Stubs and Moles for Testing' template has been deprecated, instead all you need do is to right click a reference and select 'Add moles assembly', whch is fine.
VS2010 does not allow you to add a reference directly to mscorlib, because we have a reference to "System", this is ok as I can see DateTime in object browser as part of this namespace.
If I add a moles assembly for the System reference and rebuild I still can't resolve an MDateTime.
Any suggestions ?
For Moles of mscorlib, you need to right-click directly on the References of your test project. You will have Add Moles Assembly for mscorlib.
Then, add using System.Moles;
to your test class because you want Moles of System.DateTime (actually, you need a little more).
[TestMethod()]
[HostType("Moles")]
public void DateTimeMolesTest()
{
DateTime date = new System.DateTime(2000, 1, 1, 2, 3, 4, 5);
MDateTime.NowGet = () => date;
Assert.AreEqual(date, DateTime.Now);
}
If you run this test, it will fail because you need to add:
using Microsoft.Moles.Framework;
[assembly: MoledType(typeof(System.DateTime))]
Then, your test will succeed. Don't forget that Moles cannot be used with some special types of mscorlib.
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