我有一个简单的lambda函数,因为我是Python新手,所以无法为该函数编写测试用例。因此,任务非常简单,我将一个xml文档上传到s3,并返回url。以下是主python文件中的代码:
编辑2:下面代码的目的是从JSON负载中生成一个xml,作为参数根传入,并将其上载到s3。s3已经有了一个bucket s3 encora任务,我必须上传output.xml。我必须为这种情况编写单元测试
def uploaddata(root):
xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ")
string_out = io.StringIO()
string_out.write(xmlstr)
s3.Object('s3-encora-task', 'output.xml').put(Body=string_out.getvalue())
location = boto3.client('s3').get_bucket_location(Bucket=bucket_name)['LocationConstraint']
url = "https://s3-%s.amazonaws.com/%s/%s" % (location, bucket_name, 'output.xml')
return url
我发现行中有错误:
s3.Object('s3-encora-task', 'output.xml').put(Body=string_out.getvalue())
以下是错误:
提出不必要的声明() botocore.exceptions.NoCredentialsError:找不到凭据
我有编写Junit测试类的经验,但我在比较Junit和unittest(以编写的方式)时遇到困难,因此无法清楚地表达我的问题。因此,我有以下问题:
提前谢谢
编辑1: 下面是我的测试类中的当前代码:
import jsontoxmlconverter as converter
def test_jsontoxml_happyflow(self):
with open('jsonData.txt') as json_file:
data = json.load(json_file)
mock = Mock()
mock.patch('converter.s3')
result = converter.jsontoxml(data, context={})
使用
mock.patch
:请注意,您需要告诉
patch
您要在哪个模块中修补s3。当您使用patch
作为上下文管理器时,补丁只在上下文中应用,这使得隔离像这样的更改很容易,并保证它们不会影响其他测试。上下文中可用的mock_s3
对象是一个mock.Mock
对象,它取代了s3
;在调用依赖于属性的函数之前,可以自由地重新分配属性相关问题 更多 >
编程相关推荐