0

I have a service which works fine when executed from browser, but when unit tested it fails.

The unit test

[TestMethod]
public void TestGetAllCustomFields()
{
    int totalCustomFields = DummyData.GetDummyCustomFields().Count;
    var customFieldsDbSet = HelperMethods.CreateDbSet(DummyData.GetDummyCustomFields());
    var ctx = Substitute.For<DataContext>();

    ctx.CustomFieldsActive.Returns(customFieldsDbSet);
    var target = new CustomFieldsService(ctx, reportService: null);

    var result = target.GetAllCustomFields();

    Assert.IsNotNull(result);
    Assert.AreEqual(totalCustomFields, result.Count);
}

The GetAllCustomFields()

public List<CustomField> GetAllCustomFields()
{
    var allCustomFields = _ctx.CustomFieldsActive.AsNoTracking().OrderBy(f => f.Name).ToList();
    return allCustomFields.ToList();
}

and GetDummyCustomFields() is a simple public static List<CustomField> method.

What am I missing?

Nkosi
  • 235,767
  • 35
  • 427
  • 472
etrupja
  • 2,710
  • 6
  • 22
  • 37
  • Check the remarks [here](https://msdn.microsoft.com/en-us/library/gg679352(v=vs.103).aspx#Anchor_1) *This method works by calling the **AsNoTracking** method of the underlying query object. If the underlying query object does not have a **AsNoTracking** method, then calling this method will do nothing.* – Nkosi Apr 07 '17 at 15:04
  • Make sure that the custom DbSet can handle that extension method – Nkosi Apr 07 '17 at 15:06

0 Answers0