我的项目分为三个主要组件:控制器、服务和模型。当通过 URI 查询路由时,将调用控制器,然后调用服务与模型交互,然后通过 gorm 与数据库交互。
我正在尝试为控制器编写单元测试,但我很难理解如何在模拟 gin 层的同时正确模拟服务层。我可以获得一个模拟的 gin 上下文,但我无法在我的控制器方法中模拟服务层。下面是我的代码:
资源控制器
package controllers
import (
"MyApi/models"
"MyApi/services"
"github.com/gin-gonic/gin"
"net/http"
)
func GetResourceById(c *gin.Context) {
id := c.Param("id")
resource, err := services.GetResourceById(id)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "message": err})
return
} else if resource.ID == 0 {
c.JSON(http.StatusNotFound, gin.H{"status": http.StatusNotFound, "message": "Resource with id:"+id+" does not exist"})
return
}
c.JSON(http.StatusOK, gin.H{
"id": resource.ID,
"data1": resource.Data1,
"data2": resource.Data2,
})
}
Run Code Online (Sandbox Code Playgroud)
我想测试 c.JSON 是否以正确的http状态和其他数据返回。我需要模拟id变量、err变量和 …
我正在尝试使用 Django Rest Framework 创建自定义用户。我已经到了可以创建普通用户的地步,但我不确定如何将其扩展到自定义用户模型。
模型.py:
from django.db import models
from django.contrib.postgres.fields import ArrayField
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
languages = ArrayField(models.CharField(max_length=30, blank=True))
Run Code Online (Sandbox Code Playgroud)
序列化程序.py:
from rest_framework import serializers
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'username', 'password')
def create(self, validated_data, instance=None):
user = super(UserSerializer, self).create(validated_data)
user.set_password(validated_data['password'])
user.save()
return user
Run Code Online (Sandbox Code Playgroud)
视图.py:
@api_view(['POST'])
@permission_classes((AllowAny,))
def create_user(request):
serialized = UserSerializer(data=request.data)
if serialized.is_valid():
serialized.save()
return Response(serialized.data, status=status.HTTP_201_CREATED) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用脚本填充我的 Django 数据库,因此我不必手动输入数据。到目前为止,我有以下几点:
from my_app.models import ModelInApp
import django
django.setup()
def add_data(data1, data2):
d, created = ModelInApp.objects.get_or_create(data1=data1, data2=data2)
print("- Data: {0}, Created: {1}".format(str(d), str(created)))
return d
def populate():
# data is a list of lists
for row in data:
data1 = row[0]
data2 = row[1]
add_data(data1, data2)
if __name__ == "__main__":
populate()
Run Code Online (Sandbox Code Playgroud)
data 变量是一个列表列表,其中包含我想要放入数据库的数据。问题是,当我运行脚本时,出现django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.错误。我使用 PostgreSQL 作为数据库。
我究竟做错了什么?
我试图添加到一个列表,这是一个键的值在两个不同的(操作?).以下是一个例子:
item['foo'] = ["blah"]
item['foo'] = ["garble"]
Run Code Online (Sandbox Code Playgroud)
item字典在哪里,foo是一把钥匙.然后如果我打印foo我得到:
["garble"]
当我想要的时候
["blah", "garble"]
我如何得到我想要的最终结果?
编辑:格式化
我正在Unix环境中编写C程序.我需要在程序执行之前从用户那里获取一个数字,如下所示:
./program.out 60
如何将整数值存储在C程序中?
django ×2
python ×2
automation ×1
c ×1
database ×1
dictionary ×1
django-2.0 ×1
go ×1
go-gin ×1
list ×1
python-3.x ×1
testing ×1
unit-testing ×1
unix ×1