我在Python的unittest中编写了一个小测试套件:
class TestRepos(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""Get repo lists from the svn server."""
...
def test_repo_list_not_empty(self):
"""Assert the the repo list is not empty"""
self.assertTrue(len(TestRepoLists.all_repos)>0)
def test_include_list_not_empty(self):
"""Assert the the include list is not empty"""
self.assertTrue(len(TestRepoLists.svn_dirs)>0)
...
if __name__ == '__main__':
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='tests',
descriptions=True))
Run Code Online (Sandbox Code Playgroud)
使用xmlrunner pacakge将输出格式化为Junit测试.
我添加了一个命令行参数来切换JUnit输出:
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Validate repo lists.')
parser.add_argument('--junit', action='store_true')
args=parser.parse_args()
print args
if (args.junit):
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='tests',
descriptions=True))
else:
unittest.main(TestRepoLists)
Run Code Online (Sandbox Code Playgroud)
问题是运行脚本没有--junit工作,但使用--junit与unittest参数的冲突调用它:
option --junit not recognized
Usage: …Run Code Online (Sandbox Code Playgroud) python unit-testing command-line-arguments python-2.7 python-unittest
我有这个非常简单的c程序:
#include <stdio.h>
int main (int argc, char ** argv){
printf ("%s\n",argv[1]);
}
Run Code Online (Sandbox Code Playgroud)
在Linux/bash上运行时如下:
./a.out *
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
a.c
Run Code Online (Sandbox Code Playgroud)
为什么?
Ruby 是否支持 POD 文档或任何替代方案?
我对此很感兴趣,因为我不知道如何提供一些简单的“-h”选项帮助。也许我在这里错了,请给我很好的例子。
我的例子:
$ ruby rubyScript.rb -h
This message is shown if you pass parameter -h.
Run Code Online (Sandbox Code Playgroud)
我对此的实施将是:
require 'optparse'
def HelpMessage()
puts <<-__HELP__
This message is shown if you pass parameter -h.
__HELP__
end
OptionParser.new do |opts|
opts.banner = "Usage: rubyScript.rb [options]"
opts.on('-h', '--help', 'Help option') { HelpMessage(); exit()}
end.parse!
Run Code Online (Sandbox Code Playgroud)
我认为这是一个有点丑陋的代码,但我不知道另一种创建简单帮助的方法
我有一个工作代码可以从 csv 列中打印随机行。
#!/usr/bin/python
import csv
import random
**col**=2
with open('<filename>','r') as f:
reader=csv.reader(f)
data=[row[col] for row in reader]
from random import shuffle
shuffle(data)
print '\n'.join(data[:**100**])
f.close();
Run Code Online (Sandbox Code Playgroud)
我想参数化这个脚本。通过传递,位置(列)和样本(例如 100 个值)
我找不到一个像样的教程来解释这一点。有什么想法吗 ?
我正在使用命令行中的参数运行单元测试。下面是我的测试代码。
import unittest
import sys
from toolbox.models import *
akit_id = sys.argv[1]
class TestQuizCase(unittest.TestCase):
def testupdate_quiz(self):
akit = AssignmentKit.objects.get(pk = akit_id)
akit.update_score_grade()
self.assertEqual(akit.marks, 50000)
if __name__ == "__main___":
del sys.argv[1:]
unittest.main()
Run Code Online (Sandbox Code Playgroud)
现在从命令行我正在做:
>>> python test_quiz.py 2000
Run Code Online (Sandbox Code Playgroud)
什么都没有,因此没有进行测试。我尝试了日志记录,发现控件甚至没有进入测试功能。我缺少的是导致问题的 sys.argv 吗?
我有一个用于 25 个应用程序的枚举和一个用于某些环境的枚举。
现在使用我拥有的代码,我可以不传递任何参数并在所有环境中运行所有应用程序(这是我想要的),或者我可以按顺序传递一个应用程序和一个环境,它将运行它。我需要能够通过执行类似 -app app1 app2 app3 ... -env env1 env2 ...
我以前从未使用过标志,也从未尝试过解析命令数组。这是代码的一部分。我认为 if 很好,但 else 是我需要帮助的地方。
public static Application chooseAppTest(String[] args)
{
Application application = null;
switch (Application.valueOf(args[0]))
{
case ACCOUNTINVENTORY:
new AccountInventory(Environment.valueOf(args[1]));
AccountInventory.accountInventoryDatabaseTests(testResults);
break;
public static void main(String[] args)
{
// run tests and collect results
if (args.length == 0)
{
LogIn.loginTest(testResults);
DatabaseTest.testResults(testResults);
LinkTest.linkTests(testResults);
}
else
{
// First choose application, then choose environment
Application.chooseAppTest(args);
}
Run Code Online (Sandbox Code Playgroud) 我无法理解如何创建一个函数来计算命令行参数中的字符数。它只需要在 'my_strlen()' 函数中计算结果,但在 main() 中打印结果。我对 C 很陌生,但这是迄今为止我的代码;
int my_strlen( char string[]);
{
strcpy(string, argv[1];
return 1;
}
int main(int argc, char *argv[])
{
if(argv != 2)
{
printf("You must run this program with an argument\n");
return 2;
}
printf("%d", strlen(string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我很困惑,我也不知道如何存储 strlen(string) 的值,以便稍后将其作为自己的整数调用。
以下是我正在尝试做的一个示例:
#!/bin/bash
set n = $argv[1]
g++ main.cpp
./a.out n
Run Code Online (Sandbox Code Playgroud)
我试图在shell中调用它,如下所示:
myscript 3
Run Code Online (Sandbox Code Playgroud)
输出与执行以下操作不同
./a.out 3
Run Code Online (Sandbox Code Playgroud)
但我希望它是一样的.怎么做?
我正在尝试接受命令行参数。如果我想有多个可选的命令行参数,我将如何去做?例如,您可以通过以下方式运行该程序:(每个实例都需要 a,但 -b -c -d 可以选择以任何顺序提供)
./myprogram -a
./myprogram -a -c -d
./myprogram -a -d -b
Run Code Online (Sandbox Code Playgroud)
我知道 getopt() 的第三个参数是选项。我可以将这些选项设置为“abc”,但是我设置 switch case 的方式会导致循环在每个选项处中断。
我知道,因为argc是参数的数量,它可以是一个int.但为什么应该argv是char pointer类型?这是否意味着我无法传递整数参数并argv[1]在数学运算中使用?
编辑:为了使它更清晰,是否可以写出像int* argv[].是否argv已定义为char*无法更改的类型?