2015-08-01 16 views
5

Temel bir merhaba dünya projesi kurmak istiyorum. Birim testleri, the book'da açıklandığı gibi test/ dizininde olmalıdır. Kodum şu ana kadar şöyle:Test nasıl yapılır?

src/main.rs

pub mod player; 

fn main() { 
    println!("Hello, world!"); 
} 

src/player.rs

pub fn rep(arg: i32) -> i32 { 
    arg 
} 

test/player.rs

extern crate player; 

#[test] 
fn it_works() { 
    assert_eq!(4, player::rep(2+2)); 
} 

Cargo.toml

[package] 
name = "myapp" 
version = "0.1.0" 
authors = ["My Name <[email protected]>"] 

ben kod kitabı çok benzer olduğuna inanıyoruz. Ancak, cargo test başarısız:

tests/player.rs:1:1: 1:21 error: can't find crate for `player` 
tests/player.rs:1 extern crate player; 
       ^~~~~~~~~~~~~~~~~~~~ 
error: aborting due to previous error 

sorunu nedir? Tamamen kayboldum.

+0

'Cargo.toml' dosyanızın içeriğini eklemek isteyebilirsiniz; Muhtemelen senin sorununun olduğu şeylerin ismini belirler. –

+0

@DK. lütfen, 'Cargo.toml' ile yaptığım düzenlemeye bir göz atın. Teşekkür ederim – petrbel

cevap

6

İki sorun var. Her şeyden önce, bir kütüphane değil bir yürütülebilir dosya oluşturuyorsunuz, bu yüzden test etmek için sonuca karşı bağlantı kuramıyorsunuz. İkinci olarak, modüller ve kasalar arasındaki fark konusunda kafanız karışmış görünüyor. Crates and Modules chapter of the Rust book'u okumak isteyebilirsiniz.

Kasadan tür ve yöntemlerin dışarıdan erişilebilir olmasını istiyorsanız, kodunuzu bir kitaplık içinde derlemeniz gerekir. Çoğu zaman, Rust'taki yürütülebilir dosyalar, aynı ada sahip bir kütüphanenin etrafındaki ince sarmalayıcılar olacaktır. Yani, olabilir: Bu player::rep test etmek sağlayacak

// src/main.rs 
extern crate player; 

fn main() { 
    println!("rep(42): {:?}", player::rep(42)); 
} 

// src/lib.rs 
pub fn rep(arg: i32) -> i32 { arg } 

.

Yapabileceğiniz diğer bir şey, sınama işlemini sınama kodunun yanında yazmaktır.

// src/lib.rs 
pub fn rep(arg: i32) -> i32 { arg } 

#[test] 
fn test_rep() { assert_eq!(rep(4), 4); } 
2

Kitaplık (kasa) yerine bir ikili derliyorsunuz. "Main.rs" adını "lib.rs" olarak değiştirmeyi deneyin.

+0

oh, ama bir ikili yapmak niyetinde, bu projenin sonucu yürütülebilir bir dosya olmalıdır ... – petrbel

+2

Test dizinleri kütüphanelerin işlev API'lerini test etmek için kullanılır. İkili dosyalar bunlara sahip olmadığı için, bu durumda test dizinlerini kullanmak gerçekten mantıklı değil. İkili test etmek için dahili test modüllerini kullanmak istiyorsunuz. – Zarathustra30

İlgili konular