TestContext is null when it is accessed from base class's virtual method

Try creating a ClassInitialize method:

    private static TestContext bingTestContext

    [ClassInitialize]
    public static void ClassInit(TestContext con)
    {
      bingTestContext = con;
    }

Another option is to declare the TestContext as abstract in your base class

public abstract TestContext TestContext { get; set; }

And override it in your most derived concrete class(es)

public override TestContext TestContext { get; set; }