TryValidateObjectCompare単体テスト時にモデル検証属性では機能しないようです。
ModelState.IsValid = trueであることがわかっている場合false(単体テスト時)に取得します。
私はこのサンプルモデルを持っています:
public class CompareTestModel
{
    public string Password { get; set; }
    [System.Web.Mvc.Compare(
         "Password",
          ErrorMessage = "The passwords do not match")]
    public string PasswordCompare { get; set; }
}
このヘルパー メソッドを使用して、単体テスト時にモデルを検証します。
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
public static class ModelHelper
{
    public static void ValidateModel(
         this Controller controller,
         object viewModel)
    {
        controller.ModelState.Clear();
        var validationContext = new ValidationContext(viewModel, null, null);
        var validationResults = new List<ValidationResult>();
        Validator.TryValidateObject(
            viewModel,
            validationContext,
            validationResults,
            true);
        foreach (var result in validationResults)
        {
            foreach (var name in result.MemberNames)
            {
                controller.ModelState.AddModelError(name, result.ErrorMessage);
            }
        }
    }
}
そして、この単体テストを実行します。
    [Test]
    public void CompareAttributeTest()
    {
        // arrange
        var model = new CompareTestModel();
        model.Password = "password";
        model.PasswordCompare = "different password";
        AccountController controller = new AccountController();
        // act
        controller.ValidateModel(model);
        // assert
        Assert.IsFalse(controller.ModelState.IsValid);
    }