Что я должен включить в мою функцию проверки сети?

Будьте осторожны с использованием класса SqlDependency - он имеет проблемы с утечками памяти. Hovewer, вы можете использовать реализацию с открытым исходным кодом класса SqlDependency - SqlDependencyEx . Он использует триггер базы данных и собственное уведомление Service Broker для получения событий о изменениях таблицы. Это пример использования:

int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
          TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME)) 
{
    sqlDependency.TableChanged += (o, e) => changesReceived++;
    sqlDependency.Start();

    // Make table changes.
    MakeTableInsertDeleteChanges(changesCount);

    // Wait a little bit to receive all changes.
    Thread.Sleep(1000);
}

Assert.AreEqual(changesCount, changesReceived);

С SqlDependecyEx вы можете отслеживать только UPDATE, избегая DELETE и INSERT. Надеюсь, это поможет.

1
задан Tometoyou 16 January 2019 в 16:55
поделиться

1 ответ

Я приведу два примера, которые, как мы надеемся, могут дать вам что-то, с чего можно начать издеваться над NetworkSession.

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

enum MyError: Swift.Error {
    case failed
}

final class NetworkSessionManagerMock : NetworkSession {
    var myError: MyError?
    var dataResponse: Any? // This should hopefully be typed to something

    func request(
        _ endpoint: Endpoint,
        method: HTTPMethod,
        completion: @escaping (Result<<DataResponse<Any>>, RequestError>) -> ()) { [weak self] in 
        if let myError = self?.myError {
            // Send error with completion handler
        } else if let dataResponse = self?.dataResponse {
            // Send data response
        }
    }
}

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

Я не проверял этот код на правильность синтаксиса, поэтому дайте мне знать, если в нем есть ошибка.

0
ответ дан CodeBender 16 January 2019 в 16:55
поделиться
Другие вопросы по тегам:

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