我有一组测试用例,所有测试用例应完全相同,方法是"方法x是否返回现有文件的名称?"
我认为最好的方法是从TestCase派生的基类,它们都共享,并简单地将测试添加到该类.不幸的是,测试框架仍然试图为基类运行测试,它没有意义.
class SharedTest(TestCase):
def x(self):
...do test...
class OneTestCase(SharedTest):
...my tests are performed, and 'SharedTest.x()'...
Run Code Online (Sandbox Code Playgroud)
我试图破解检查只是跳过测试,如果它被调用基类的对象而不是像这样的派生类:
class SharedTest(TestCase):
def x(self):
if type(self) != type(SharedTest()):
...do test...
else:
pass
Run Code Online (Sandbox Code Playgroud)
但得到了这个错误:
ValueError: no such test method in <class 'tests.SharedTest'>: runTest
Run Code Online (Sandbox Code Playgroud)
首先,我想要做任何优雅的建议.其次,虽然我真的不想使用type()hack,但我想理解为什么它不起作用.
在使用Django时,我想要安静地保护一些pylint错误.导致最大刺激的两个是从django.db.models.Model派生并访问对象和django.test.TestCase.首先,pylint抱怨任何使用属性'objects'的代码,说它不是成员.在第二个,在对测试用例添加七个测试之后,它抱怨公共方法太多(我猜测TestCase有十四个)
我知道这个问题的第一部分是问题115977的副本,但是这个问题有点陈旧,没有一个解决方案非常好,所以我想我会解决这个问题.
我不想简单地压制pylint中的抱怨,因为我喜欢在其他情况下看到它们.
我正在使用Django在基于Web的应用程序上做一些i18n,它使用gettext作为其i18n基础.翻译应该存储在数据库中似乎是一个明显的想法,并不难做到,但文件系统上的po文件仍在使用中.为什么是这样?
我目前的怀疑是,gettext作为一个完善的软件包的可靠性/熟悉程度简直超过了开发数据库的优势所带来的好处.还有其他重要原因继续将翻译存储在文件系统中吗?
这似乎是一个不费吹灰之力,我犹豫是否承认我花了大约两个小时试图找到答案,但我无法弄清楚如何为django项目运行项目级测试.
需要明确的是,对项目中的应用程序运行测试没有问题.我理解'./manage.py test',但它没有找到我编写的项目级测试.
我尝试将项目级测试放在'my-django-project/tests.py'和'my-django-project/tests/testcode.py'中,但是找不到这些测试.我错过了什么?
为了使项目的开发更容易,我在 docker 容器中放置了几个它依赖的服务。这使得项目配置中的“localhost”在传递给其中一个容器时具有不同的含义。
编辑
需要明确的是,我正在尝试将容器的一个端口转发到主机,因此当容器中运行的进程尝试访问 localhost:5432 时,它会连接到主机的端口 5432。
结束编辑
我目前正在使用
HOST_IP=`ip route | grep default | awk '{ printf "%s",$3 }'`
cat /etc/hosts | sed "s/127.0.0.1/$HOST_IP/" > /tmp/etc_hosts
cp /tmp/etc_hosts /etc/hosts
Run Code Online (Sandbox Code Playgroud)
将任何针对 'localhost' 的内容重定向到容器的主机。它在这种情况下有效,但我更愿意找到一种仅针对所需端口执行此操作的方法,因为我预计它在其他情况下不起作用。
这是我想出的办法,但它不起作用;当容器中的连接是到 localhost:5432 时,它会尝试连接到容器的 5432 而不是主机的:
# --- These are the things that should make redirecting port 5432 to the host machine
# work, provided the container is run in privileged mode.
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat …Run Code Online (Sandbox Code Playgroud) 我很好奇为什么这个命令:
for f in `/bin/ls /mydir | sort | tail -n 10`; do echo $f; done;
Run Code Online (Sandbox Code Playgroud)
输出/ mydir中的最后十个文件,但是
/bin/bash -c "for f in `/bin/ls /mydir | sort | tail -n 10`; do echo $f; done;"
Run Code Online (Sandbox Code Playgroud)
输出"意外令牌附近的语法错误"[文件在/ mydir]'"
django ×4
python ×2
bash ×1
docker ×1
gettext ×1
iptables ×1
pylint ×1
subclassing ×1
testing ×1
unit-testing ×1