Поблочное тестирование направляющих не загружает приспособления

Да.

Извинения за то, что были прерваны (я должен на самом деле сделать некоторую работу время от времени). Спецификация не делает явно , говорит она, но она делает это довольно ясным IMO в разделе 7.6.10.2:

<час>

объектный инициализатор состоит из последовательности членских инициализаторов, включенных {и} маркеры и разделенный запятыми.

(Отмечают слово "последовательность" здесь, вместо того, чтобы "установить". Я лично думаю, что это значительно, поскольку последовательность заказана.)

следующий класс представляет точку с двумя координатами:

public class Point
{
    int x, y;
    public int X { get { return x; } set { x = value; } }
    public int Y { get { return y; } set { y = value; } }
}

экземпляр Точки может быть создан и инициализирован следующим образом:

Point a = new Point { X = 0, Y = 1 };

, который имеет тот же эффект как [1 117]

Point __a = new Point();
__a.X = 0;
__a.Y = 1; 
Point a = __a;

где __ в других отношениях невидимой и недоступной временной переменной.

<час>

РЕДАКТИРОВАНИЕ: у меня был ответ от Mads Torgersen, который в основном сказал, что что-либо, что может быть сделано теперь, сохранит порядок. Могут быть некоторые причуды в будущем, где порядок не сохраняется в странных случаях, где Вы делаете что-то другой , чем установка свойства/поля, но это будет зависеть от того, куда язык идет.

стоит указать, что существует на самом деле много шагов, продолжающихся здесь - существует порядок выполнения оценки аргументов (т.е. биты RHS) и порядок выполнения присвоений. Например, если Вы имеете:

new Foo
{
    A = X,
    B = Y
}

все выполняющие приказы возможны, все еще поддерживая порядок фактического выполнения свойства (A и B):

  • Оценивают X, присваиваются к A, оценивают Y, присваивают B
  • , Оценивают X, оценивают Y, присваиваются к A, присваивают B
  • , Оценивают Y, оценивают X, присваиваются к A, присваивают B

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

я также был бы очень опасающийся на самом деле написания кода, которое зависит от этого...

10
задан meagar 22 March 2018 в 17:03
поделиться

4 ответа

Наконец-то я нашел проблему, хотя ее решение довольно хакерское.

Один плагин полагается, что в базе данных есть некоторые данные, по крайней мере, одна строка. Итак, что произошло:

  1. rake загружает схему базы данных
  2. rake пытается загрузить среду
  3. среда включает плагин
  4. загрузка плагина не удалась из-за отсутствия хотя бы одной строки
  5. фикстуры не загружены

Хакерское решение: поместите необходимые данные прямо в схему, а не в фикстуры, потому что они загружаются слишком поздно.

Я буду искать более удобное решение и обновлю этот ответ, если найду его.

4
ответ дан 3 December 2019 в 22:37
поделиться

Поместите вызов fixtures: all в вашем тестовом классе, а не в суперкласс (test_helper). Я предполагаю, что инициализация суперкласса работает не так, как вы ожидаете, и что fixtures: all не вызывается. Возможно, попробуйте поместить вызов в метод инициализации test_helper.

Мой test / test_helper.rb выглядит так:

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end
6
ответ дан 3 December 2019 в 22:37
поделиться

Не уверен, что вы это уже сделали, но экспортируйте тестовые данные из базы данных в файлы yml в test / fixtures с помощью плагина вроде ar_fixtures

0
ответ дан 3 December 2019 в 22:37
поделиться

Другой подход - написать свою собственную задачу для тестирования.

Например:


task :test_units do

  RAILS_ENV = 'test' # Force the environment to test

  puts "Recreate the test database"
  Rake::Task['db:test:prepare'].invoke

  puts "Seed the database with fixtures"
  Rake::Task['db:fixtures:load'].invoke

  puts "Executing Unit Tests"
  Rake::Task['test:units'].prerequisites.clear 
  Rake::Task['test:units'].invoke
end

5
ответ дан 3 December 2019 в 22:37
поделиться
Другие вопросы по тегам:

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