Образцовые предупреждения в ASP.NET MVC

Чего вам не хватает, так это Async async = context.async();. При этом юнит-тест остается в методе до тех пор, пока он не будет установлен для завершения. Затем вы можете организовать свой асинхронный код следующим образом:

  • сначала развернуть вертикал
  • , затем выполнить loadtestGeneration
  • , чтобы установить асинхронное выполнение так, чтобы другие Методы unittest уже могут получить доступ к вашей вертикалке без nullpointerexception

Я также сделал некоторую очистку, проверьте ее:

BeforeClass

  @BeforeClass
  public static void before2(TestContext context){
    Async async = context.async();
    vertx = Vertx.vertx();
    DeploymentOptions options = new DeploymentOptions();
    byte[] encoded;
    JsonObject config;

    try {
      encoded = Files.readAllBytes(Paths.get("src/main/resources/config.json"));
      config = new JsonObject(new String(encoded, Charset.defaultCharset()));
      options.setConfig(config);
      jdbc = JDBCClient.createShared(vertx, config , "PostgreSQL");

      deployVerticle2(options)
        .compose(c -> loadTestData2(jdbc))
        .setHandler(h -> {
          if(h.succeeded()){
            async.complete();
          }else{
            context.fail(h.cause());
          }
        });

    } catch (IOException e){
      context.fail(e);
    }
  }

DeployVerticle

[ 111]

LoadTestData

  private static Future<Void> loadTestData2(JDBCClient jdbc){
    Future<Void> future = Future.future();

    jdbc.getConnection(connection -> {
      if (connection.succeeded()) {
        connection.result().query(deleteTestDataGeneration, queryResult -> {
          if(queryResult.failed()){
            connection.result().close();
            future.fail(queryResult.cause());
          }else{
            connection.result().close();
            future.complete();
          }
        });
      } else {
        future.fail(connection.cause());
      }
    });

    return future;
  }
6
задан Knocktorius Maxima 17 October 2018 в 08:34
поделиться

2 ответа

Таким образом, маршрут, что я направился вниз, прежде чем оказались плохая идея, просто нет достаточного доступа в платформе для достигания битов, в которых Вы нуждаетесь. По крайней мере, не изобретая велосипед несколько раз.

Я решил возглавить вниз маршрут расширения класса ModelState для добавления набора предупреждений к нему:

public class AetherModelState : ModelState
{
    public AetherModelState() { }

    public AetherModelState(ModelState state)
    {
        this.AttemptedValue = state.AttemptedValue;

        foreach (var error in state.Errors)
            this.Errors.Add(error);
    }

    private ModelErrorCollection _warnings = new ModelErrorCollection();

    public ModelErrorCollection Warnings { get { return this._warnings; } }
}

Чтобы смочь легко добавить предупреждения таким же образом, что Вы были бы ошибки, я создал некоторые дополнительные методы для ModelStateDictionary:

public static class ModelStateDictionaryExtensions
{
    public static void AddModelWarning(this ModelStateDictionary msd, string key, Exception exception)
    {
        GetModelStateForKey(key, msd).Warnings.Add(exception);
    }

    public static void AddModelWarning(this ModelStateDictionary msd, string key, string errorMessage)
    {
        GetModelStateForKey(key, msd).Warnings.Add(errorMessage);
    }

    private static AetherModelState GetModelStateForKey(string key, ModelStateDictionary msd)
    {
        ModelState state;
        if (string.IsNullOrEmpty(key))
            throw new ArgumentException("key");

        if (!msd.TryGetValue(key, out state))
        {
            msd[key] = state = new AetherModelState();
        }

        if (!(state is AetherModelState))
        {
            msd.Remove(key);
            msd[key] = state = new AetherModelState(state);
        }

        return state as AetherModelState;
    }

    public static bool HasWarnings(this ModelStateDictionary msd)
    {
        return msd.Values.Any<ModelState>(delegate(ModelState modelState)
        {
            var aState = modelState as AetherModelState;
            if (aState == null) return true;
            return (aState.Warnings.Count == 0);
        });
    }
}

Код GetModelStateForKey скверен, но необходимо смочь видеть, куда я направляюсь с этим. Следующая вещь сделать состоит в том, чтобы записать некоторые дополнительные методы, которые позволяют мне отображать предупреждения наряду с ошибками

6
ответ дан 10 December 2019 в 00:45
поделиться

Почему не просто добавляют список предупреждений или словарь, к ViewData и затем отображают их в Вашем представлении?

например.

ViewData[ "warnings" ] = new[] { "You need to snarfle your aardvark" } ;
4
ответ дан 10 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: