Autotools:如何使用make check运行单个测试?

时间:2016-07-16 13:18:06

标签: unit-testing makefile autotools

我目前正在开发一个使用autotools生成makefile的项目。像往常一样,这个makefile支持#import "ViewController.h" @interface ViewController () <NSURLSessionDelegate, NSURLSessionDownloadDelegate> @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil]; NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:[NSURL URLWithString:@"http://cdn.tutsplus.com/mobile/uploads/2013/12/sample.jpg"]]; [downloadTask resume]; } - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { NSData *data = [NSData dataWithContentsOfURL:location]; dispatch_async(dispatch_get_main_queue(), ^{ [self.progressView setHidden:YES]; [self.imageView setImage:[UIImage imageWithData:data]]; }); } - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes { } - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite { float progress = (double)totalBytesWritten / (double)totalBytesExpectedToWrite; dispatch_async(dispatch_get_main_queue(), ^{ [self.progressView setProgress:progress]; }); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } ,以运行整个测试套件。但是,我正在研究该程序的一小部分,其中只有少数单元测试适用。是否可以使用make check运行单个单元测试或选择单元测试而不是整个套件?

修改 Evan VanderZee suggests它取决于目录结构,所以让我解释一下目录结构。该项目的目录结构非常平坦。大多数源文件位于make check目录中,其中一些文件分组在src/下的子目录中。单元测试在src/。没有源目录包含Makefile。顶层只有一个makefile(由configure生成)。

2 个答案:

答案 0 :(得分:8)

如果您使用Automake的TESTS变量列出make check运行的测试,那么有一个简单的快捷方式:make check TESTS='name-of-test1 name-of-test2'命令行上传递的TESTS变量覆盖Makefile中的那个。

或者,export TESTS='names-of-tests'; make -e check从环境中获取TESTS的值。

如果您没有使用TESTS而是使用check-local或其他目标,那么这将不起作用。

答案 1 :(得分:1)

答案取决于您使用的特定makefile。如果测试具有目录结构,您通常可以导航到子目录并在子目录中运行make check

由于您后来解释说您的目录结构是扁平的,因此很难说没有实际看到一些makefile。如果您知道为要运行的特定测试创建的可执行文件的名称,则可以运行make name_of_test来构建要运行的测试。这不会运行测试,它只会构建它。构建之后,测试可以驻留在测试目录中。在此之后,您可以进入测试目录并以运行可执行文件的典型方式运行测试,但如果测试依赖于库,您可能需要告诉测试在哪里找到这些库,可能通过添加一些库来LD_LIBRARY_PATH

如果您希望经常这样做,可能会修改makefile以支持运行您要运行的特定测试。通常,这会涉及编辑Makefile.amMakefile.in,然后重新配置,但我还没有足够的信息来建议您需要进行哪些编辑。