имплементировать следующее (но кажется что задачка типовая):
1. Есть сервер на tonic, запускаемый через:
let addr = "[::1]:50051".parse().unwrap();
let service = FlightServiceImpl {};
let svc = FlightServiceServer::new(service);
let server = Server::builder().add_service(svc).serve(addr);
println!("Server listening on localhost:{}", addr.port());
2. Я хочу написать несколько тестов для такого сервера - т.е. в рамках тестового модуля запустить сервер, отправить несколько запросов с клиента, потушить сервер после тестов.
В python это решалось бы через unittest setUp / tearDown, в scalatest - через BeforeAndAfterAll, а как в Rust?
а в расте я рекомендую тебе тестировать не то что ты сервер поднял, а твои хэндлеры с логикой. Впрочем, тот же совет я бы дал и для скалы и для питона
А интеграционные / e2e?
а интеграционные от языка не зависят. берете какой-нибудь cypress и погнали
Можно интеграционный сделать. Но твой код должен быть не в main, а в либе. Его импортируешь в тесте, запускаешь в тренде и вперёд
Если я правильно понял вопрос, то видел вот что-то такое. Но сам не пробовал https://stackoverflow.com/questions/38253321/what-is-a-good-way-of-cleaning-up-after-a-unit-test-in-rust
ну и есть всякие процмакросы вроде https://crates.io/crates/rstest
а что не так? Наш бек на шарпе тестировали куа на питоне 🤷♀️
фреймворком на жс
ну они потом пеерехали как раз на него вроде. Или там лид куа свой написал, не пмоню. Долгая история
Если я написал клиент на расте, сервер на расте, почему бы не иметь возможности написать тест на расте? Зачем мне в этой связке js, lua, c#, whatever
Обсуждают сегодня